Enter the directory of the maca folder on your drive and the name of the tissue you want to analyze.

tissue_of_interest = "Marrow"

Load the requisite packages and some additional helper functions.

library(here)
here() starts at /home/sinhar/github/tabula-muris
library(useful)
library(Seurat)
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(Matrix)
library(ontologyIndex)
cell_ontology = get_ontology('https://raw.githubusercontent.com/obophenotype/cell-ontology/master/cl-basic.obo', extract_tags='everything')
validate_cell_ontology = function(cell_ontology_class){
  in_cell_ontology = sapply(cell_ontology_class, function(x) is.element(x, cell_ontology$name) || is.na(x))
  if (!all(in_cell_ontology)) {
    message = paste0('"', cell_ontology_class[!in_cell_ontology], '" is not in the cell ontology
')
    stop(message)
  }
}
convert_to_cell_ontology_id = function(cell_ontology_class){
  return(sapply(cell_ontology_class, function(x) as.vector(cell_ontology$id[cell_ontology$name == x])[1]))
}
save_dir = here('00_data_ingest', 'tissue_robj')
# read the metadata to get the plates we want
plate_metadata_filename = here('00_data_ingest', '00_facs_raw_data', 'metadata_FACS.csv')
plate_metadata <- read.csv(plate_metadata_filename, sep=",", header = TRUE)
colnames(plate_metadata)[1] <- "plate.barcode"
plate_metadata

Subset the metadata on the tissue.

tissue_plates = filter(plate_metadata, tissue == tissue_of_interest)[,c('plate.barcode','tissue','subtissue','mouse.sex')]
tissue_plates

Load the read count data.

#Load the gene names and set the metadata columns by opening the first file
filename = here('00_data_ingest', '00_facs_raw_data', 'FACS', paste0(tissue_of_interest, '-counts.csv'))
raw.data = read.csv(filename, sep=",", row.names=1)
# raw.data = data.frame(row.names = rownames(raw.data))
corner(raw.data)

Make a vector of plate barcodes for each cell

plate.barcodes = lapply(colnames(raw.data), function(x) strsplit(strsplit(x, "_")[[1]][1], '.', fixed=TRUE)[[1]][2])
head(plate.barcodes)
[[1]]
[1] "D042044"

[[2]]
[1] "D042044"

[[3]]
[1] "D042044"

[[4]]
[1] "D042044"

[[5]]
[1] "D042044"

[[6]]
[1] "D042044"

Use only the metadata rows corresponding to Bladder plates. Make a plate barcode dataframe to “expand” the per-plate metadata to be per-cell.

barcode.df = t.data.frame(as.data.frame(plate.barcodes))
rownames(barcode.df) = colnames(raw.data)
colnames(barcode.df) = c('plate.barcode')
head(barcode.df)
                      plate.barcode
A22.D042044.3_9_M.1.1 "D042044"    
C5.D042044.3_9_M.1.1  "D042044"    
D10.D042044.3_9_M.1.1 "D042044"    
E13.D042044.3_9_M.1.1 "D042044"    
F19.D042044.3_9_M.1.1 "D042044"    
H2.D042044.3_9_M.1.1  "D042044"    
rnames = row.names(barcode.df)
meta.data <- merge(barcode.df, plate_metadata, by='plate.barcode', sort = T)
row.names(meta.data) <- rnames
corner(meta.data)
# Sort cells by plate barcode because that's how the data was originally
meta.data = meta.data[order(meta.data$plate.barcode), ]
corner(meta.data)
raw.data = raw.data[, rownames(meta.data)]
corner(raw.data)

Process the raw data and load it into the Seurat object.

# Find ERCC's, compute the percent ERCC, and drop them from the raw data.
erccs <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = TRUE)
percent.ercc <- Matrix::colSums(raw.data[erccs, ])/Matrix::colSums(raw.data)
ercc.index <- grep(pattern = "^ERCC-", x = rownames(x = raw.data), value = FALSE)
raw.data <- raw.data[-ercc.index,]
# Create the Seurat object with all the data
tiss <- CreateSeuratObject(raw.data = raw.data, project = tissue_of_interest, 
                    min.cells = 5, min.genes = 5)
tiss <- AddMetaData(object = tiss, meta.data)
tiss <- AddMetaData(object = tiss, percent.ercc, col.name = "percent.ercc")
# Change default name for sums of counts from nUMI to nReads
colnames(tiss@meta.data)[colnames(tiss@meta.data) == 'nUMI'] <- 'nReads'
# Create metadata columns for cell_ontology_classs and subcell_ontology_classs
tiss@meta.data[,'free_annotation'] <- NA
tiss@meta.data[,'cell_ontology_class'] <- NA
tiss@meta.data[,'subcell_ontology_class'] <- NA

Calculate percent ribosomal genes.

ribo.genes <- grep(pattern = "^Rp[sl][[:digit:]]", x = rownames(x = tiss@data), value = TRUE)
percent.ribo <- Matrix::colSums(tiss@raw.data[ribo.genes, ])/Matrix::colSums(tiss@raw.data)
tiss <- AddMetaData(object = tiss, metadata = percent.ribo, col.name = "percent.ribo")

A sanity check: genes per cell vs reads per cell.

GenePlot(object = tiss, gene1 = "nReads", gene2 = "nGene", use.raw=T)

Filter out cells with few reads and few genes.

tiss <- FilterCells(object = tiss, subset.names = c("nGene", "nReads"), 
    low.thresholds = c(500, 50000), high.thresholds = c(25000, 2000000))

Normalize the data, then regress out correlation with total reads

tiss <- NormalizeData(object = tiss, scale.factor = 1e6)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
tiss <- ScaleData(object = tiss)
[1] "Scaling data matrix"

  |                                                                                                                  
  |                                                                                                            |   0%
  |                                                                                                                  
  |======                                                                                                      |   6%
  |                                                                                                                  
  |============                                                                                                |  11%
  |                                                                                                                  
  |==================                                                                                          |  17%
  |                                                                                                                  
  |========================                                                                                    |  22%
  |                                                                                                                  
  |==============================                                                                              |  28%
  |                                                                                                                  
  |====================================                                                                        |  33%
  |                                                                                                                  
  |==========================================                                                                  |  39%
  |                                                                                                                  
  |================================================                                                            |  44%
  |                                                                                                                  
  |======================================================                                                      |  50%
  |                                                                                                                  
  |============================================================                                                |  56%
  |                                                                                                                  
  |==================================================================                                          |  61%
  |                                                                                                                  
  |========================================================================                                    |  67%
  |                                                                                                                  
  |==============================================================================                              |  72%
  |                                                                                                                  
  |====================================================================================                        |  78%
  |                                                                                                                  
  |==========================================================================================                  |  83%
  |                                                                                                                  
  |================================================================================================            |  89%
  |                                                                                                                  
  |======================================================================================================      |  94%
  |                                                                                                                  
  |============================================================================================================| 100%
tiss <- FindVariableGenes(object = tiss, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.5)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

Run Principal Component Analysis.

tiss <- RunPCA(object = tiss, do.print = FALSE)
tiss <- ProjectPCA(object = tiss, do.print = FALSE)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = tiss)

Choose the number of principal components to use.

# Set number of principal components. 
n.pcs = 12

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

For the top-level clustering, aim to under-cluster instead of over-cluster. It will be easy to subset groups and further analyze them below.

# Set resolution 
res.used <- 0.5
tiss <- FindClusters(object = tiss, reduction.type = "pca", dims.use = 1:n.pcs, 
    resolution = res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
tiss <- RunTSNE(object = tiss, dims.use = 1:n.pcs, seed.use = 10, perplexity=84)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = tiss, do.label = T)

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(tiss@ident)

  0   1   2   3   4   5   6   7   8   9  10  11  12 
679 671 514 438 391 369 358 329 292 290 207 187 172 

Which markers identify a specific cluster?

clust.markers <- FindMarkers(object = tiss, ident.1 = 0, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~01m 38s      
   |++                                                | 2 % ~01m 36s      
   |++                                                | 3 % ~01m 32s      
   |+++                                               | 4 % ~01m 32s      
   |+++                                               | 5 % ~01m 31s      
   |++++                                              | 6 % ~01m 31s      
   |++++                                              | 7 % ~01m 30s      
   |+++++                                             | 9 % ~01m 29s      
   |+++++                                             | 10% ~01m 34s      
   |++++++                                            | 11% ~01m 32s      
   |++++++                                            | 12% ~01m 31s      
   |+++++++                                           | 13% ~01m 29s      
   |+++++++                                           | 14% ~01m 28s      
   |++++++++                                          | 15% ~01m 27s      
   |++++++++                                          | 16% ~01m 25s      
   |+++++++++                                         | 17% ~01m 24s      
   |++++++++++                                        | 18% ~01m 23s      
   |++++++++++                                        | 19% ~01m 21s      
   |+++++++++++                                       | 20% ~01m 20s      
   |+++++++++++                                       | 21% ~01m 19s      
   |++++++++++++                                      | 22% ~01m 18s      
   |++++++++++++                                      | 23% ~01m 17s      
   |+++++++++++++                                     | 24% ~01m 16s      
   |+++++++++++++                                     | 26% ~01m 15s      
   |++++++++++++++                                    | 27% ~01m 14s      
   |++++++++++++++                                    | 28% ~01m 13s      
   |+++++++++++++++                                   | 29% ~01m 12s      
   |+++++++++++++++                                   | 30% ~01m 11s      
   |++++++++++++++++                                  | 31% ~01m 10s      
   |++++++++++++++++                                  | 32% ~01m 09s      
   |+++++++++++++++++                                 | 33% ~01m 07s      
   |++++++++++++++++++                                | 34% ~01m 06s      
   |++++++++++++++++++                                | 35% ~01m 05s      
   |+++++++++++++++++++                               | 36% ~01m 04s      
   |+++++++++++++++++++                               | 37% ~01m 03s      
   |++++++++++++++++++++                              | 38% ~01m 02s      
   |++++++++++++++++++++                              | 39% ~01m 01s      
   |+++++++++++++++++++++                             | 40% ~01m 00s      
   |+++++++++++++++++++++                             | 41% ~59s          
   |++++++++++++++++++++++                            | 43% ~58s          
   |++++++++++++++++++++++                            | 44% ~57s          
   |+++++++++++++++++++++++                           | 45% ~56s          
   |+++++++++++++++++++++++                           | 46% ~55s          
   |++++++++++++++++++++++++                          | 47% ~54s          
   |++++++++++++++++++++++++                          | 48% ~52s          
   |+++++++++++++++++++++++++                         | 49% ~52s          
   |+++++++++++++++++++++++++                         | 50% ~50s          
   |++++++++++++++++++++++++++                        | 51% ~49s          
   |+++++++++++++++++++++++++++                       | 52% ~48s          
   |+++++++++++++++++++++++++++                       | 53% ~47s          
   |++++++++++++++++++++++++++++                      | 54% ~46s          
   |++++++++++++++++++++++++++++                      | 55% ~45s          
   |+++++++++++++++++++++++++++++                     | 56% ~44s          
   |+++++++++++++++++++++++++++++                     | 57% ~43s          
   |++++++++++++++++++++++++++++++                    | 59% ~42s          
   |++++++++++++++++++++++++++++++                    | 60% ~41s          
   |+++++++++++++++++++++++++++++++                   | 61% ~40s          
   |+++++++++++++++++++++++++++++++                   | 62% ~39s          
   |++++++++++++++++++++++++++++++++                  | 63% ~38s          
   |++++++++++++++++++++++++++++++++                  | 64% ~37s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~36s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~35s          
   |++++++++++++++++++++++++++++++++++                | 67% ~33s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~32s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~31s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~30s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~29s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~28s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~27s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~26s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~25s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~24s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~23s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~22s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~18s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~15s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~04s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~03s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 01m 41s
print(x = head(x= clust.markers, n = 10))

You can also compute all markers for all clusters at once. This may take some time.

tiss.markers <- FindAllMarkers(object = tiss, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04m 17s      
   |++                                                | 2 % ~04m 11s      
   |++                                                | 3 % ~04m 11s      
   |+++                                               | 4 % ~04m 11s      
   |+++                                               | 5 % ~04m 08s      
   |++++                                              | 6 % ~04m 06s      
   |++++                                              | 7 % ~04m 07s      
   |+++++                                             | 8 % ~04m 07s      
   |+++++                                             | 9 % ~04m 05s      
   |++++++                                            | 10% ~04m 02s      
   |++++++                                            | 11% ~03m 59s      
   |+++++++                                           | 12% ~03m 55s      
   |+++++++                                           | 13% ~03m 53s      
   |++++++++                                          | 14% ~03m 50s      
   |++++++++                                          | 15% ~03m 47s      
   |+++++++++                                         | 16% ~03m 44s      
   |+++++++++                                         | 17% ~03m 41s      
   |++++++++++                                        | 18% ~03m 39s      
   |++++++++++                                        | 19% ~03m 37s      
   |+++++++++++                                       | 20% ~03m 34s      
   |+++++++++++                                       | 21% ~03m 31s      
   |++++++++++++                                      | 22% ~03m 29s      
   |++++++++++++                                      | 23% ~03m 27s      
   |+++++++++++++                                     | 24% ~03m 24s      
   |+++++++++++++                                     | 26% ~03m 21s      
   |++++++++++++++                                    | 27% ~03m 18s      
   |++++++++++++++                                    | 28% ~03m 18s      
   |+++++++++++++++                                   | 29% ~03m 15s      
   |+++++++++++++++                                   | 30% ~03m 12s      
   |++++++++++++++++                                  | 31% ~03m 09s      
   |++++++++++++++++                                  | 32% ~03m 06s      
   |+++++++++++++++++                                 | 33% ~03m 03s      
   |+++++++++++++++++                                 | 34% ~03m 01s      
   |++++++++++++++++++                                | 35% ~02m 58s      
   |++++++++++++++++++                                | 36% ~02m 55s      
   |+++++++++++++++++++                               | 37% ~02m 52s      
   |+++++++++++++++++++                               | 38% ~02m 50s      
   |++++++++++++++++++++                              | 39% ~02m 48s      
   |++++++++++++++++++++                              | 40% ~02m 45s      
   |+++++++++++++++++++++                             | 41% ~02m 42s      
   |+++++++++++++++++++++                             | 42% ~02m 39s      
   |++++++++++++++++++++++                            | 43% ~02m 36s      
   |++++++++++++++++++++++                            | 44% ~02m 34s      
   |+++++++++++++++++++++++                           | 45% ~02m 31s      
   |+++++++++++++++++++++++                           | 46% ~02m 29s      
   |++++++++++++++++++++++++                          | 47% ~02m 26s      
   |++++++++++++++++++++++++                          | 48% ~02m 23s      
   |+++++++++++++++++++++++++                         | 49% ~02m 20s      
   |+++++++++++++++++++++++++                         | 50% ~02m 17s      
   |++++++++++++++++++++++++++                        | 51% ~02m 15s      
   |+++++++++++++++++++++++++++                       | 52% ~02m 12s      
   |+++++++++++++++++++++++++++                       | 53% ~02m 09s      
   |++++++++++++++++++++++++++++                      | 54% ~02m 06s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 03s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 60s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 57s      
   |++++++++++++++++++++++++++++++                    | 58% ~01m 54s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 51s      
   |+++++++++++++++++++++++++++++++                   | 60% ~01m 48s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 46s      
   |++++++++++++++++++++++++++++++++                  | 62% ~01m 43s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 40s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~01m 37s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 34s      
   |++++++++++++++++++++++++++++++++++                | 66% ~01m 32s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 29s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 26s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 23s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~01m 20s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 18s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01m 15s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 12s      
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01m 09s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 07s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 04s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 01s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~58s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~55s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~53s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~50s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~47s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~45s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~42s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~39s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~36s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~31s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~28s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~11s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~08s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04m 32s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06m 29s      
   |++                                                | 2 % ~06m 32s      
   |++                                                | 3 % ~06m 24s      
   |+++                                               | 4 % ~06m 23s      
   |+++                                               | 5 % ~06m 19s      
   |++++                                              | 6 % ~06m 22s      
   |++++                                              | 7 % ~06m 21s      
   |+++++                                             | 8 % ~06m 17s      
   |+++++                                             | 9 % ~06m 14s      
   |++++++                                            | 10% ~06m 11s      
   |++++++                                            | 11% ~06m 05s      
   |+++++++                                           | 12% ~06m 01s      
   |+++++++                                           | 13% ~05m 55s      
   |++++++++                                          | 14% ~05m 54s      
   |++++++++                                          | 15% ~05m 50s      
   |+++++++++                                         | 16% ~05m 46s      
   |+++++++++                                         | 17% ~05m 42s      
   |++++++++++                                        | 18% ~05m 38s      
   |++++++++++                                        | 19% ~05m 33s      
   |+++++++++++                                       | 20% ~05m 29s      
   |+++++++++++                                       | 21% ~05m 26s      
   |++++++++++++                                      | 22% ~05m 20s      
   |++++++++++++                                      | 23% ~05m 19s      
   |+++++++++++++                                     | 24% ~05m 14s      
   |+++++++++++++                                     | 25% ~05m 10s      
   |++++++++++++++                                    | 26% ~05m 09s      
   |++++++++++++++                                    | 27% ~05m 05s      
   |+++++++++++++++                                   | 28% ~05m 01s      
   |+++++++++++++++                                   | 29% ~04m 56s      
   |++++++++++++++++                                  | 30% ~04m 52s      
   |++++++++++++++++                                  | 31% ~04m 47s      
   |+++++++++++++++++                                 | 32% ~04m 42s      
   |+++++++++++++++++                                 | 33% ~04m 39s      
   |++++++++++++++++++                                | 34% ~04m 34s      
   |++++++++++++++++++                                | 35% ~04m 30s      
   |+++++++++++++++++++                               | 36% ~04m 25s      
   |+++++++++++++++++++                               | 37% ~04m 21s      
   |++++++++++++++++++++                              | 38% ~04m 17s      
   |++++++++++++++++++++                              | 39% ~04m 12s      
   |+++++++++++++++++++++                             | 40% ~04m 08s      
   |+++++++++++++++++++++                             | 41% ~04m 04s      
   |++++++++++++++++++++++                            | 42% ~03m 60s      
   |++++++++++++++++++++++                            | 43% ~03m 56s      
   |+++++++++++++++++++++++                           | 44% ~03m 51s      
   |+++++++++++++++++++++++                           | 45% ~03m 47s      
   |++++++++++++++++++++++++                          | 46% ~03m 42s      
   |++++++++++++++++++++++++                          | 47% ~03m 38s      
   |+++++++++++++++++++++++++                         | 48% ~03m 34s      
   |+++++++++++++++++++++++++                         | 49% ~03m 29s      
   |++++++++++++++++++++++++++                        | 51% ~03m 25s      
   |++++++++++++++++++++++++++                        | 52% ~03m 21s      
   |+++++++++++++++++++++++++++                       | 53% ~03m 17s      
   |+++++++++++++++++++++++++++                       | 54% ~03m 13s      
   |++++++++++++++++++++++++++++                      | 55% ~03m 09s      
   |++++++++++++++++++++++++++++                      | 56% ~03m 04s      
   |+++++++++++++++++++++++++++++                     | 57% ~03m 00s      
   |+++++++++++++++++++++++++++++                     | 58% ~02m 56s      
   |++++++++++++++++++++++++++++++                    | 59% ~02m 52s      
   |++++++++++++++++++++++++++++++                    | 60% ~02m 47s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 43s      
   |+++++++++++++++++++++++++++++++                   | 62% ~02m 39s      
   |++++++++++++++++++++++++++++++++                  | 63% ~02m 35s      
   |++++++++++++++++++++++++++++++++                  | 64% ~02m 31s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~02m 27s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 23s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 18s      
   |++++++++++++++++++++++++++++++++++                | 68% ~02m 14s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 10s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 05s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 01s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 57s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 53s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 48s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 44s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 40s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 36s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 32s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 28s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 23s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 19s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 15s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 11s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 07s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 03s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~58s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~54s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~50s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~46s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~42s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~38s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~33s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~29s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06m 53s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04m 59s      
   |++                                                | 2 % ~06m 05s      
   |++                                                | 3 % ~05m 40s      
   |+++                                               | 4 % ~05m 25s      
   |+++                                               | 5 % ~05m 14s      
   |++++                                              | 6 % ~05m 06s      
   |++++                                              | 7 % ~04m 60s      
   |+++++                                             | 8 % ~04m 54s      
   |+++++                                             | 9 % ~04m 49s      
   |++++++                                            | 10% ~04m 44s      
   |++++++                                            | 11% ~04m 43s      
   |+++++++                                           | 12% ~04m 38s      
   |+++++++                                           | 13% ~04m 33s      
   |++++++++                                          | 14% ~04m 30s      
   |++++++++                                          | 15% ~04m 26s      
   |+++++++++                                         | 16% ~04m 22s      
   |+++++++++                                         | 17% ~04m 19s      
   |++++++++++                                        | 18% ~04m 16s      
   |++++++++++                                        | 19% ~04m 13s      
   |+++++++++++                                       | 20% ~04m 09s      
   |+++++++++++                                       | 21% ~04m 07s      
   |++++++++++++                                      | 22% ~04m 03s      
   |++++++++++++                                      | 23% ~04m 00s      
   |+++++++++++++                                     | 24% ~03m 59s      
   |+++++++++++++                                     | 25% ~03m 56s      
   |++++++++++++++                                    | 26% ~03m 52s      
   |++++++++++++++                                    | 27% ~03m 48s      
   |+++++++++++++++                                   | 28% ~03m 44s      
   |+++++++++++++++                                   | 29% ~03m 41s      
   |++++++++++++++++                                  | 30% ~03m 37s      
   |++++++++++++++++                                  | 31% ~03m 34s      
   |+++++++++++++++++                                 | 32% ~03m 30s      
   |+++++++++++++++++                                 | 33% ~03m 27s      
   |++++++++++++++++++                                | 34% ~03m 24s      
   |++++++++++++++++++                                | 35% ~03m 20s      
   |+++++++++++++++++++                               | 36% ~03m 17s      
   |+++++++++++++++++++                               | 37% ~03m 15s      
   |++++++++++++++++++++                              | 38% ~03m 11s      
   |++++++++++++++++++++                              | 39% ~03m 08s      
   |+++++++++++++++++++++                             | 40% ~03m 04s      
   |+++++++++++++++++++++                             | 41% ~03m 02s      
   |++++++++++++++++++++++                            | 42% ~02m 59s      
   |++++++++++++++++++++++                            | 43% ~02m 55s      
   |+++++++++++++++++++++++                           | 44% ~02m 53s      
   |+++++++++++++++++++++++                           | 45% ~02m 50s      
   |++++++++++++++++++++++++                          | 46% ~02m 48s      
   |++++++++++++++++++++++++                          | 47% ~02m 45s      
   |+++++++++++++++++++++++++                         | 48% ~02m 41s      
   |+++++++++++++++++++++++++                         | 49% ~02m 38s      
   |++++++++++++++++++++++++++                        | 51% ~02m 35s      
   |++++++++++++++++++++++++++                        | 52% ~02m 32s      
   |+++++++++++++++++++++++++++                       | 53% ~02m 28s      
   |+++++++++++++++++++++++++++                       | 54% ~02m 25s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 22s      
   |++++++++++++++++++++++++++++                      | 56% ~02m 19s      
   |+++++++++++++++++++++++++++++                     | 57% ~02m 15s      
   |+++++++++++++++++++++++++++++                     | 58% ~02m 12s      
   |++++++++++++++++++++++++++++++                    | 59% ~02m 09s      
   |++++++++++++++++++++++++++++++                    | 60% ~02m 06s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 02s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 59s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 56s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 53s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 50s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 46s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 43s      
   |++++++++++++++++++++++++++++++++++                | 68% ~01m 40s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 37s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~01m 34s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 31s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 28s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 25s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 21s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 18s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 15s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 12s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 09s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 06s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 03s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~60s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~57s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~53s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~50s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~47s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~44s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~41s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~38s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~28s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~25s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05m 11s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~09m 04s      
   |+                                                 | 2 % ~08m 51s      
   |++                                                | 3 % ~08m 42s      
   |++                                                | 4 % ~08m 42s      
   |+++                                               | 5 % ~08m 36s      
   |+++                                               | 6 % ~08m 30s      
   |++++                                              | 7 % ~08m 26s      
   |++++                                              | 8 % ~08m 21s      
   |+++++                                             | 9 % ~08m 19s      
   |+++++                                             | 10% ~08m 14s      
   |++++++                                            | 11% ~08m 10s      
   |++++++                                            | 12% ~08m 06s      
   |+++++++                                           | 13% ~08m 00s      
   |+++++++                                           | 14% ~07m 55s      
   |++++++++                                          | 15% ~07m 49s      
   |++++++++                                          | 16% ~07m 43s      
   |+++++++++                                         | 17% ~07m 37s      
   |+++++++++                                         | 18% ~07m 33s      
   |++++++++++                                        | 19% ~07m 27s      
   |++++++++++                                        | 20% ~07m 25s      
   |+++++++++++                                       | 21% ~07m 20s      
   |+++++++++++                                       | 22% ~07m 14s      
   |++++++++++++                                      | 23% ~07m 09s      
   |++++++++++++                                      | 24% ~07m 04s      
   |+++++++++++++                                     | 25% ~06m 58s      
   |+++++++++++++                                     | 26% ~06m 52s      
   |++++++++++++++                                    | 27% ~06m 49s      
   |++++++++++++++                                    | 28% ~06m 43s      
   |+++++++++++++++                                   | 29% ~06m 41s      
   |+++++++++++++++                                   | 30% ~06m 36s      
   |++++++++++++++++                                  | 31% ~06m 31s      
   |++++++++++++++++                                  | 32% ~06m 26s      
   |+++++++++++++++++                                 | 33% ~06m 19s      
   |+++++++++++++++++                                | 34% ~06m 14s      
   |++++++++++++++++++                                | 35% ~06m 08s      
   |++++++++++++++++++                                | 36% ~06m 02s      
   |+++++++++++++++++++                               | 37% ~05m 56s      
   |+++++++++++++++++++                               | 38% ~05m 50s      
   |++++++++++++++++++++                              | 39% ~05m 44s      
   |++++++++++++++++++++                              | 40% ~05m 39s      
   |+++++++++++++++++++++                             | 41% ~05m 33s      
   |+++++++++++++++++++++                             | 42% ~05m 27s      
   |++++++++++++++++++++++                            | 43% ~05m 21s      
   |++++++++++++++++++++++                            | 44% ~05m 15s      
   |+++++++++++++++++++++++                           | 45% ~05m 10s      
   |+++++++++++++++++++++++                           | 46% ~05m 04s      
   |++++++++++++++++++++++++                          | 47% ~04m 59s      
   |++++++++++++++++++++++++                          | 48% ~04m 53s      
   |+++++++++++++++++++++++++                         | 49% ~04m 49s      
   |+++++++++++++++++++++++++                         | 50% ~04m 43s      
   |++++++++++++++++++++++++++                        | 51% ~04m 37s      
   |++++++++++++++++++++++++++                        | 52% ~04m 31s      
   |+++++++++++++++++++++++++++                       | 53% ~04m 25s      
   |+++++++++++++++++++++++++++                       | 54% ~04m 19s      
   |++++++++++++++++++++++++++++                      | 55% ~04m 14s      
   |++++++++++++++++++++++++++++                     | 56% ~04m 08s      
   |+++++++++++++++++++++++++++++                     | 57% ~04m 03s      
   |+++++++++++++++++++++++++++++                     | 58% ~03m 58s      
   |++++++++++++++++++++++++++++++                    | 59% ~03m 52s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 46s      
   |+++++++++++++++++++++++++++++++                   | 61% ~03m 41s      
   |+++++++++++++++++++++++++++++++                   | 62% ~03m 35s      
   |++++++++++++++++++++++++++++++++                  | 63% ~03m 30s      
   |++++++++++++++++++++++++++++++++                  | 64% ~03m 24s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~03m 18s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~03m 13s      
   |++++++++++++++++++++++++++++++++++                | 67% ~03m 07s      
   |++++++++++++++++++++++++++++++++++               | 68% ~03m 01s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 55s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 50s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 44s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~02m 39s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 33s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02m 27s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02m 22s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02m 16s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02m 11s      
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~02m 05s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 60s      
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01m 54s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 48s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 42s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 37s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 31s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 25s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01m 19s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01m 14s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01m 08s      
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01m 02s      
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~57s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~51s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~45s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~40s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~34s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~28s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~23s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 09m 23s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07m 57s      
   |++                                                | 2 % ~07m 47s      
   |++                                                | 3 % ~07m 49s      
   |+++                                               | 4 % ~07m 43s      
   |+++                                               | 5 % ~07m 40s      
   |++++                                              | 6 % ~07m 33s      
   |++++                                              | 7 % ~07m 28s      
   |+++++                                             | 8 % ~07m 21s      
   |+++++                                             | 9 % ~07m 18s      
   |++++++                                            | 10% ~07m 13s      
   |++++++                                            | 11% ~07m 09s      
   |+++++++                                           | 12% ~07m 05s      
   |+++++++                                           | 13% ~07m 00s      
   |++++++++                                          | 14% ~06m 58s      
   |++++++++                                          | 15% ~06m 53s      
   |+++++++++                                         | 16% ~06m 47s      
   |+++++++++                                         | 17% ~06m 42s      
   |++++++++++                                        | 18% ~06m 38s      
   |++++++++++                                        | 19% ~06m 33s      
   |+++++++++++                                       | 20% ~06m 28s      
   |+++++++++++                                       | 21% ~06m 24s      
   |++++++++++++                                      | 22% ~06m 19s      
   |++++++++++++                                      | 23% ~06m 14s      
   |+++++++++++++                                     | 24% ~06m 10s      
   |+++++++++++++                                     | 25% ~06m 05s      
   |++++++++++++++                                    | 26% ~06m 04s      
   |++++++++++++++                                    | 27% ~05m 59s      
   |+++++++++++++++                                   | 28% ~05m 54s      
   |+++++++++++++++                                   | 29% ~05m 49s      
   |++++++++++++++++                                  | 30% ~05m 43s      
   |++++++++++++++++                                  | 31% ~05m 38s      
   |+++++++++++++++++                                 | 32% ~05m 33s      
   |+++++++++++++++++                                 | 33% ~05m 28s      
   |++++++++++++++++++                                | 34% ~05m 23s      
   |++++++++++++++++++                                | 35% ~05m 18s      
   |+++++++++++++++++++                               | 36% ~05m 13s      
   |+++++++++++++++++++                               | 37% ~05m 08s      
   |++++++++++++++++++++                              | 38% ~05m 03s      
   |++++++++++++++++++++                              | 39% ~04m 58s      
   |+++++++++++++++++++++                             | 40% ~04m 53s      
   |+++++++++++++++++++++                             | 41% ~04m 49s      
   |++++++++++++++++++++++                            | 42% ~04m 44s      
   |++++++++++++++++++++++                            | 43% ~04m 39s      
   |+++++++++++++++++++++++                           | 44% ~04m 34s      
   |+++++++++++++++++++++++                           | 45% ~04m 29s      
   |++++++++++++++++++++++++                          | 46% ~04m 24s      
   |++++++++++++++++++++++++                          | 47% ~04m 19s      
   |+++++++++++++++++++++++++                         | 48% ~04m 14s      
   |+++++++++++++++++++++++++                         | 49% ~04m 10s      
   |++++++++++++++++++++++++++                        | 51% ~04m 05s      
   |++++++++++++++++++++++++++                        | 52% ~04m 00s      
   |+++++++++++++++++++++++++++                       | 53% ~03m 56s      
   |+++++++++++++++++++++++++++                       | 54% ~03m 51s      
   |++++++++++++++++++++++++++++                      | 55% ~03m 46s      
   |++++++++++++++++++++++++++++                      | 56% ~03m 41s      
   |+++++++++++++++++++++++++++++                     | 57% ~03m 36s      
   |+++++++++++++++++++++++++++++                     | 58% ~03m 31s      
   |++++++++++++++++++++++++++++++                    | 59% ~03m 26s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 22s      
   |+++++++++++++++++++++++++++++++                   | 61% ~03m 17s      
   |+++++++++++++++++++++++++++++++                   | 62% ~03m 11s      
   |++++++++++++++++++++++++++++++++                  | 63% ~03m 06s      
   |++++++++++++++++++++++++++++++++                  | 64% ~03m 01s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~02m 56s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 51s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 46s      
   |++++++++++++++++++++++++++++++++++                | 68% ~02m 41s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 36s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 31s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 26s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~02m 21s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 16s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02m 11s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02m 06s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02m 01s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 56s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 51s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 46s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 41s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 36s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 31s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 26s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 21s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 16s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01m 11s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01m 06s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01m 01s      
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~56s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~51s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~46s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~41s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~36s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~26s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 08m 27s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~08m 17s      
   |++                                                | 2 % ~08m 09s      
   |++                                                | 3 % ~08m 01s      
   |+++                                               | 4 % ~07m 51s      
   |+++                                               | 5 % ~07m 44s      
   |++++                                              | 6 % ~07m 42s      
   |++++                                              | 7 % ~07m 37s      
   |+++++                                             | 8 % ~07m 31s      
   |+++++                                             | 9 % ~07m 24s      
   |++++++                                            | 10% ~07m 18s      
   |++++++                                            | 11% ~07m 14s      
   |+++++++                                           | 12% ~07m 06s      
   |+++++++                                           | 13% ~07m 00s      
   |++++++++                                          | 14% ~06m 55s      
   |++++++++                                          | 15% ~06m 52s      
   |+++++++++                                         | 16% ~06m 47s      
   |+++++++++                                         | 17% ~06m 41s      
   |++++++++++                                        | 18% ~06m 36s      
   |++++++++++                                        | 19% ~06m 31s      
   |+++++++++++                                       | 20% ~06m 26s      
   |+++++++++++                                       | 21% ~06m 23s      
   |++++++++++++                                      | 22% ~06m 17s      
   |++++++++++++                                      | 23% ~06m 16s      
   |+++++++++++++                                     | 24% ~06m 11s      
   |+++++++++++++                                     | 25% ~06m 06s      
   |++++++++++++++                                    | 26% ~06m 01s      
   |++++++++++++++                                    | 27% ~05m 56s      
   |+++++++++++++++                                   | 28% ~05m 52s      
   |+++++++++++++++                                   | 29% ~05m 47s      
   |++++++++++++++++                                  | 30% ~05m 42s      
   |++++++++++++++++                                  | 31% ~05m 37s      
   |+++++++++++++++++                                 | 32% ~05m 32s      
   |+++++++++++++++++                                 | 33% ~05m 30s      
   |++++++++++++++++++                                | 34% ~05m 25s      
   |++++++++++++++++++                                | 35% ~05m 19s      
   |+++++++++++++++++++                               | 36% ~05m 14s      
   |+++++++++++++++++++                               | 37% ~05m 09s      
   |++++++++++++++++++++                              | 38% ~05m 04s      
   |++++++++++++++++++++                              | 39% ~04m 59s      
   |+++++++++++++++++++++                             | 40% ~04m 54s      
   |+++++++++++++++++++++                             | 41% ~04m 49s      
   |++++++++++++++++++++++                            | 42% ~04m 44s      
   |++++++++++++++++++++++                            | 43% ~04m 38s      
   |+++++++++++++++++++++++                           | 44% ~04m 33s      
   |+++++++++++++++++++++++                           | 45% ~04m 28s      
   |++++++++++++++++++++++++                          | 46% ~04m 23s      
   |++++++++++++++++++++++++                          | 47% ~04m 18s      
   |+++++++++++++++++++++++++                         | 48% ~04m 14s      
   |+++++++++++++++++++++++++                         | 49% ~04m 08s      
   |++++++++++++++++++++++++++                        | 51% ~04m 03s      
   |++++++++++++++++++++++++++                        | 52% ~03m 58s      
   |+++++++++++++++++++++++++++                       | 53% ~03m 53s      
   |+++++++++++++++++++++++++++                       | 54% ~03m 48s      
   |++++++++++++++++++++++++++++                      | 55% ~03m 43s      
   |++++++++++++++++++++++++++++                      | 56% ~03m 38s      
   |+++++++++++++++++++++++++++++                     | 57% ~03m 34s      
   |+++++++++++++++++++++++++++++                     | 58% ~03m 29s      
   |++++++++++++++++++++++++++++++                    | 59% ~03m 25s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 20s      
   |+++++++++++++++++++++++++++++++                   | 61% ~03m 15s      
   |+++++++++++++++++++++++++++++++                   | 62% ~03m 10s      
   |++++++++++++++++++++++++++++++++                  | 63% ~03m 05s      
   |++++++++++++++++++++++++++++++++                  | 64% ~03m 00s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~02m 56s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 50s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 46s      
   |++++++++++++++++++++++++++++++++++                | 68% ~02m 41s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 36s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 31s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 26s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~02m 21s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 16s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02m 11s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02m 06s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02m 01s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 56s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 51s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 46s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 41s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 36s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 31s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 26s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 21s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 16s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01m 11s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01m 06s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01m 01s      
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~56s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~51s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~46s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~40s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~30s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~25s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~20s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 08m 17s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 17s      
   |++                                                | 2 % ~03m 16s      
   |++                                                | 3 % ~03m 15s      
   |+++                                               | 4 % ~03m 15s      
   |+++                                               | 5 % ~03m 15s      
   |++++                                              | 6 % ~03m 12s      
   |++++                                              | 7 % ~03m 13s      
   |+++++                                             | 8 % ~03m 13s      
   |+++++                                             | 9 % ~03m 10s      
   |++++++                                            | 10% ~03m 07s      
   |++++++                                            | 11% ~03m 03s      
   |+++++++                                           | 12% ~03m 01s      
   |+++++++                                           | 13% ~02m 57s      
   |++++++++                                          | 14% ~02m 55s      
   |++++++++                                          | 15% ~02m 53s      
   |+++++++++                                         | 16% ~02m 50s      
   |+++++++++                                         | 17% ~02m 48s      
   |++++++++++                                        | 18% ~02m 47s      
   |++++++++++                                        | 19% ~02m 45s      
   |+++++++++++                                       | 20% ~02m 44s      
   |+++++++++++                                       | 21% ~02m 41s      
   |++++++++++++                                      | 22% ~02m 39s      
   |++++++++++++                                      | 23% ~02m 37s      
   |+++++++++++++                                     | 24% ~02m 35s      
   |+++++++++++++                                     | 26% ~02m 34s      
   |++++++++++++++                                    | 27% ~02m 33s      
   |++++++++++++++                                    | 28% ~02m 31s      
   |+++++++++++++++                                   | 29% ~02m 29s      
   |+++++++++++++++                                   | 30% ~02m 27s      
   |++++++++++++++++                                  | 31% ~02m 24s      
   |++++++++++++++++                                  | 32% ~02m 22s      
   |+++++++++++++++++                                 | 33% ~02m 20s      
   |+++++++++++++++++                                 | 34% ~02m 19s      
   |++++++++++++++++++                                | 35% ~02m 16s      
   |++++++++++++++++++                                | 36% ~02m 14s      
   |+++++++++++++++++++                               | 37% ~02m 12s      
   |+++++++++++++++++++                               | 38% ~02m 10s      
   |++++++++++++++++++++                              | 39% ~02m 07s      
   |++++++++++++++++++++                              | 40% ~02m 05s      
   |+++++++++++++++++++++                             | 41% ~02m 03s      
   |+++++++++++++++++++++                             | 42% ~02m 01s      
   |++++++++++++++++++++++                            | 43% ~01m 59s      
   |++++++++++++++++++++++                            | 44% ~01m 58s      
   |+++++++++++++++++++++++                           | 45% ~01m 56s      
   |+++++++++++++++++++++++                           | 46% ~01m 54s      
   |++++++++++++++++++++++++                          | 47% ~01m 52s      
   |++++++++++++++++++++++++                          | 48% ~01m 50s      
   |+++++++++++++++++++++++++                         | 49% ~01m 47s      
   |+++++++++++++++++++++++++                         | 50% ~01m 45s      
   |++++++++++++++++++++++++++                        | 51% ~01m 43s      
   |+++++++++++++++++++++++++++                       | 52% ~01m 41s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 39s      
   |++++++++++++++++++++++++++++                      | 54% ~01m 37s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 35s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 33s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 30s      
   |++++++++++++++++++++++++++++++                    | 58% ~01m 28s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 26s      
   |+++++++++++++++++++++++++++++++                   | 60% ~01m 24s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 22s      
   |++++++++++++++++++++++++++++++++                  | 62% ~01m 20s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 18s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~01m 16s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 14s      
   |++++++++++++++++++++++++++++++++++                | 66% ~01m 12s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 10s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 07s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 05s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~01m 03s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 01s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~58s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~56s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~54s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~52s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~50s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~48s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~45s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~43s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~41s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~39s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~37s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~34s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~30s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~28s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~17s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~13s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~11s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~06s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 28s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~04m 50s      
   |+                                                 | 2 % ~04m 53s      
   |++                                                | 3 % ~04m 54s      
   |++                                                | 4 % ~04m 51s      
   |+++                                               | 5 % ~04m 46s      
   |+++                                               | 6 % ~04m 40s      
   |++++                                              | 7 % ~04m 36s      
   |++++                                              | 8 % ~04m 32s      
   |+++++                                             | 9 % ~04m 27s      
   |+++++                                             | 10% ~04m 23s      
   |++++++                                            | 11% ~04m 19s      
   |++++++                                            | 12% ~04m 15s      
   |+++++++                                           | 13% ~04m 13s      
   |+++++++                                           | 14% ~04m 13s      
   |++++++++                                          | 15% ~04m 11s      
   |++++++++                                          | 16% ~04m 09s      
   |+++++++++                                         | 17% ~04m 07s      
   |+++++++++                                         | 18% ~04m 04s      
   |++++++++++                                        | 19% ~04m 01s      
   |++++++++++                                        | 20% ~03m 59s      
   |+++++++++++                                       | 21% ~03m 57s      
   |+++++++++++                                       | 22% ~03m 55s      
   |++++++++++++                                      | 23% ~03m 52s      
   |++++++++++++                                      | 24% ~03m 49s      
   |+++++++++++++                                     | 25% ~03m 48s      
   |+++++++++++++                                     | 26% ~03m 44s      
   |++++++++++++++                                    | 27% ~03m 41s      
   |++++++++++++++                                    | 28% ~03m 38s      
   |+++++++++++++++                                   | 29% ~03m 36s      
   |+++++++++++++++                                   | 30% ~03m 33s      
   |++++++++++++++++                                  | 31% ~03m 30s      
   |++++++++++++++++                                  | 32% ~03m 30s      
   |+++++++++++++++++                                 | 33% ~03m 26s      
   |+++++++++++++++++                                | 34% ~03m 23s      
   |++++++++++++++++++                                | 35% ~03m 19s      
   |++++++++++++++++++                                | 36% ~03m 16s      
   |+++++++++++++++++++                               | 37% ~03m 13s      
   |+++++++++++++++++++                               | 38% ~03m 10s      
   |++++++++++++++++++++                              | 39% ~03m 07s      
   |++++++++++++++++++++                              | 40% ~03m 04s      
   |+++++++++++++++++++++                             | 41% ~03m 01s      
   |+++++++++++++++++++++                             | 42% ~02m 59s      
   |++++++++++++++++++++++                            | 43% ~02m 56s      
   |++++++++++++++++++++++                            | 44% ~02m 53s      
   |+++++++++++++++++++++++                           | 45% ~02m 50s      
   |+++++++++++++++++++++++                           | 46% ~02m 48s      
   |++++++++++++++++++++++++                          | 47% ~02m 45s      
   |++++++++++++++++++++++++                          | 48% ~02m 42s      
   |+++++++++++++++++++++++++                         | 49% ~02m 39s      
   |+++++++++++++++++++++++++                         | 50% ~02m 36s      
   |++++++++++++++++++++++++++                        | 51% ~02m 33s      
   |++++++++++++++++++++++++++                        | 52% ~02m 30s      
   |+++++++++++++++++++++++++++                       | 53% ~02m 27s      
   |+++++++++++++++++++++++++++                       | 54% ~02m 24s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 21s      
   |++++++++++++++++++++++++++++                     | 56% ~02m 18s      
   |+++++++++++++++++++++++++++++                     | 57% ~02m 15s      
   |+++++++++++++++++++++++++++++                     | 58% ~02m 11s      
   |++++++++++++++++++++++++++++++                    | 59% ~02m 08s      
   |++++++++++++++++++++++++++++++                    | 60% ~02m 05s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 02s      
   |+++++++++++++++++++++++++++++++                   | 62% ~01m 59s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 56s      
   |++++++++++++++++++++++++++++++++                  | 64% ~01m 53s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 50s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 46s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 43s      
   |++++++++++++++++++++++++++++++++++               | 68% ~01m 40s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 37s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~01m 34s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 31s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 28s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 24s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 21s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 18s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 15s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 12s      
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~01m 09s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 06s      
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01m 03s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 00s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~57s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~54s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~51s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~48s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~44s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~41s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~38s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~32s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~29s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~22s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~19s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~16s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~13s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~06s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05m 18s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~06m 14s      
   |++                                                | 2 % ~06m 05s      
   |++                                                | 3 % ~05m 59s      
   |+++                                               | 4 % ~05m 50s      
   |+++                                               | 5 % ~05m 47s      
   |++++                                              | 6 % ~05m 49s      
   |++++                                              | 7 % ~05m 46s      
   |+++++                                             | 8 % ~05m 43s      
   |+++++                                             | 9 % ~05m 40s      
   |++++++                                            | 10% ~05m 36s      
   |++++++                                            | 11% ~05m 33s      
   |+++++++                                           | 12% ~05m 31s      
   |+++++++                                           | 13% ~05m 28s      
   |++++++++                                          | 14% ~05m 25s      
   |++++++++                                          | 15% ~05m 21s      
   |+++++++++                                         | 16% ~05m 19s      
   |+++++++++                                         | 17% ~05m 18s      
   |++++++++++                                        | 18% ~05m 15s      
   |++++++++++                                        | 19% ~05m 12s      
   |+++++++++++                                       | 20% ~05m 08s      
   |+++++++++++                                       | 21% ~05m 06s      
   |++++++++++++                                      | 22% ~05m 01s      
   |++++++++++++                                      | 23% ~04m 57s      
   |+++++++++++++                                     | 24% ~04m 53s      
   |+++++++++++++                                     | 26% ~04m 49s      
   |++++++++++++++                                    | 27% ~04m 45s      
   |++++++++++++++                                    | 28% ~04m 44s      
   |+++++++++++++++                                   | 29% ~04m 39s      
   |+++++++++++++++                                   | 30% ~04m 36s      
   |++++++++++++++++                                  | 31% ~04m 31s      
   |++++++++++++++++                                  | 32% ~04m 28s      
   |+++++++++++++++++                                 | 33% ~04m 24s      
   |+++++++++++++++++                                 | 34% ~04m 20s      
   |++++++++++++++++++                                | 35% ~04m 17s      
   |++++++++++++++++++                                | 36% ~04m 12s      
   |+++++++++++++++++++                               | 37% ~04m 09s      
   |+++++++++++++++++++                               | 38% ~04m 04s      
   |++++++++++++++++++++                              | 39% ~03m 60s      
   |++++++++++++++++++++                              | 40% ~03m 57s      
   |+++++++++++++++++++++                             | 41% ~03m 53s      
   |+++++++++++++++++++++                             | 42% ~03m 49s      
   |++++++++++++++++++++++                            | 43% ~03m 45s      
   |++++++++++++++++++++++                            | 44% ~03m 41s      
   |+++++++++++++++++++++++                           | 45% ~03m 37s      
   |+++++++++++++++++++++++                           | 46% ~03m 32s      
   |++++++++++++++++++++++++                          | 47% ~03m 28s      
   |++++++++++++++++++++++++                          | 48% ~03m 24s      
   |+++++++++++++++++++++++++                         | 49% ~03m 20s      
   |+++++++++++++++++++++++++                         | 50% ~03m 16s      
   |++++++++++++++++++++++++++                        | 51% ~03m 12s      
   |+++++++++++++++++++++++++++                       | 52% ~03m 08s      
   |+++++++++++++++++++++++++++                       | 53% ~03m 04s      
   |++++++++++++++++++++++++++++                      | 54% ~02m 60s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 56s      
   |+++++++++++++++++++++++++++++                     | 56% ~02m 52s      
   |+++++++++++++++++++++++++++++                     | 57% ~02m 48s      
   |++++++++++++++++++++++++++++++                    | 58% ~02m 44s      
   |++++++++++++++++++++++++++++++                    | 59% ~02m 40s      
   |+++++++++++++++++++++++++++++++                   | 60% ~02m 36s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 32s      
   |++++++++++++++++++++++++++++++++                  | 62% ~02m 28s      
   |++++++++++++++++++++++++++++++++                  | 63% ~02m 23s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~02m 19s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~02m 15s      
   |++++++++++++++++++++++++++++++++++                | 66% ~02m 11s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 08s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~02m 04s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 60s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~01m 56s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 52s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01m 48s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 44s      
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01m 40s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 36s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 32s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 28s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 24s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 20s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 16s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 12s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 08s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 04s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~60s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~56s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~52s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~48s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~44s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~40s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~36s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~24s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~20s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~12s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~08s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~04s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 06m 28s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03m 30s      
   |++                                                | 2 % ~03m 32s      
   |++                                                | 3 % ~03m 31s      
   |+++                                               | 4 % ~03m 29s      
   |+++                                               | 5 % ~03m 29s      
   |++++                                              | 6 % ~03m 26s      
   |++++                                              | 7 % ~03m 24s      
   |+++++                                             | 8 % ~03m 22s      
   |+++++                                             | 9 % ~03m 20s      
   |++++++                                            | 10% ~03m 18s      
   |++++++                                            | 11% ~03m 17s      
   |+++++++                                           | 12% ~03m 15s      
   |+++++++                                           | 13% ~03m 13s      
   |++++++++                                          | 14% ~03m 11s      
   |++++++++                                          | 15% ~03m 08s      
   |+++++++++                                         | 16% ~03m 05s      
   |+++++++++                                         | 17% ~03m 03s      
   |++++++++++                                        | 18% ~03m 01s      
   |++++++++++                                        | 19% ~02m 59s      
   |+++++++++++                                       | 20% ~02m 57s      
   |+++++++++++                                       | 21% ~02m 55s      
   |++++++++++++                                      | 22% ~02m 53s      
   |++++++++++++                                      | 23% ~02m 50s      
   |+++++++++++++                                     | 24% ~02m 48s      
   |+++++++++++++                                     | 26% ~02m 46s      
   |++++++++++++++                                    | 27% ~02m 44s      
   |++++++++++++++                                    | 28% ~02m 42s      
   |+++++++++++++++                                   | 29% ~02m 40s      
   |+++++++++++++++                                   | 30% ~02m 38s      
   |++++++++++++++++                                  | 31% ~02m 35s      
   |++++++++++++++++                                  | 32% ~02m 33s      
   |+++++++++++++++++                                 | 33% ~02m 31s      
   |+++++++++++++++++                                 | 34% ~02m 29s      
   |++++++++++++++++++                                | 35% ~02m 27s      
   |++++++++++++++++++                                | 36% ~02m 24s      
   |+++++++++++++++++++                               | 37% ~02m 22s      
   |+++++++++++++++++++                               | 38% ~02m 20s      
   |++++++++++++++++++++                              | 39% ~02m 18s      
   |++++++++++++++++++++                              | 40% ~02m 16s      
   |+++++++++++++++++++++                             | 41% ~02m 13s      
   |+++++++++++++++++++++                             | 42% ~02m 12s      
   |++++++++++++++++++++++                            | 43% ~02m 10s      
   |++++++++++++++++++++++                            | 44% ~02m 08s      
   |+++++++++++++++++++++++                           | 45% ~02m 05s      
   |+++++++++++++++++++++++                           | 46% ~02m 03s      
   |++++++++++++++++++++++++                          | 47% ~02m 00s      
   |++++++++++++++++++++++++                          | 48% ~01m 58s      
   |+++++++++++++++++++++++++                         | 49% ~01m 56s      
   |+++++++++++++++++++++++++                         | 50% ~01m 54s      
   |++++++++++++++++++++++++++                        | 51% ~01m 51s      
   |+++++++++++++++++++++++++++                       | 52% ~01m 49s      
   |+++++++++++++++++++++++++++                       | 53% ~01m 47s      
   |++++++++++++++++++++++++++++                      | 54% ~01m 45s      
   |++++++++++++++++++++++++++++                      | 55% ~01m 42s      
   |+++++++++++++++++++++++++++++                     | 56% ~01m 40s      
   |+++++++++++++++++++++++++++++                     | 57% ~01m 38s      
   |++++++++++++++++++++++++++++++                    | 58% ~01m 36s      
   |++++++++++++++++++++++++++++++                    | 59% ~01m 33s      
   |+++++++++++++++++++++++++++++++                   | 60% ~01m 32s      
   |+++++++++++++++++++++++++++++++                   | 61% ~01m 30s      
   |++++++++++++++++++++++++++++++++                  | 62% ~01m 27s      
   |++++++++++++++++++++++++++++++++                  | 63% ~01m 25s      
   |+++++++++++++++++++++++++++++++++                 | 64% ~01m 23s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 20s      
   |++++++++++++++++++++++++++++++++++                | 66% ~01m 18s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 15s      
   |+++++++++++++++++++++++++++++++++++               | 68% ~01m 13s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 11s      
   |++++++++++++++++++++++++++++++++++++              | 70% ~01m 08s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 06s      
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01m 04s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 01s      
   |++++++++++++++++++++++++++++++++++++++            | 74% ~59s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~56s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~54s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~52s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~49s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~47s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~45s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~42s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~40s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~38s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~35s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~33s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~26s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~19s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~16s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~14s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~12s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~09s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~07s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 03m 50s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07m 58s      
   |++                                                | 2 % ~07m 59s      
   |++                                                | 3 % ~08m 03s      
   |+++                                               | 4 % ~07m 54s      
   |+++                                               | 5 % ~07m 49s      
   |++++                                              | 6 % ~07m 46s      
   |++++                                              | 7 % ~07m 41s      
   |+++++                                             | 8 % ~07m 41s      
   |+++++                                             | 9 % ~07m 49s      
   |++++++                                            | 10% ~07m 42s      
   |++++++                                            | 11% ~07m 34s      
   |+++++++                                           | 12% ~07m 28s      
   |+++++++                                           | 13% ~07m 22s      
   |++++++++                                          | 14% ~07m 14s      
   |++++++++                                          | 15% ~07m 11s      
   |+++++++++                                         | 16% ~07m 05s      
   |+++++++++                                         | 17% ~06m 59s      
   |++++++++++                                        | 18% ~06m 53s      
   |++++++++++                                        | 19% ~06m 47s      
   |+++++++++++                                       | 20% ~06m 42s      
   |+++++++++++                                       | 21% ~06m 36s      
   |++++++++++++                                      | 22% ~06m 31s      
   |++++++++++++                                      | 23% ~06m 26s      
   |+++++++++++++                                     | 24% ~06m 22s      
   |+++++++++++++                                     | 25% ~06m 16s      
   |++++++++++++++                                    | 26% ~06m 11s      
   |++++++++++++++                                    | 27% ~06m 06s      
   |+++++++++++++++                                   | 28% ~06m 01s      
   |+++++++++++++++                                   | 29% ~05m 56s      
   |++++++++++++++++                                  | 30% ~05m 51s      
   |++++++++++++++++                                  | 31% ~05m 45s      
   |+++++++++++++++++                                 | 32% ~05m 43s      
   |+++++++++++++++++                                 | 33% ~05m 37s      
   |++++++++++++++++++                                | 34% ~05m 31s      
   |++++++++++++++++++                                | 35% ~05m 26s      
   |+++++++++++++++++++                               | 36% ~05m 21s      
   |+++++++++++++++++++                               | 37% ~05m 15s      
   |++++++++++++++++++++                              | 38% ~05m 11s      
   |++++++++++++++++++++                              | 39% ~05m 06s      
   |+++++++++++++++++++++                             | 40% ~05m 00s      
   |+++++++++++++++++++++                             | 41% ~04m 55s      
   |++++++++++++++++++++++                            | 42% ~04m 50s      
   |++++++++++++++++++++++                            | 43% ~04m 45s      
   |+++++++++++++++++++++++                           | 44% ~04m 40s      
   |+++++++++++++++++++++++                           | 45% ~04m 34s      
   |++++++++++++++++++++++++                          | 46% ~04m 29s      
   |++++++++++++++++++++++++                          | 47% ~04m 24s      
   |+++++++++++++++++++++++++                         | 48% ~04m 19s      
   |+++++++++++++++++++++++++                         | 49% ~04m 14s      
   |++++++++++++++++++++++++++                        | 51% ~04m 09s      
   |++++++++++++++++++++++++++                        | 52% ~04m 05s      
   |+++++++++++++++++++++++++++                       | 53% ~04m 00s      
   |+++++++++++++++++++++++++++                       | 54% ~03m 56s      
   |++++++++++++++++++++++++++++                      | 55% ~03m 51s      
   |++++++++++++++++++++++++++++                      | 56% ~03m 46s      
   |+++++++++++++++++++++++++++++                     | 57% ~03m 41s      
   |+++++++++++++++++++++++++++++                     | 58% ~03m 36s      
   |++++++++++++++++++++++++++++++                    | 59% ~03m 31s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 26s      
   |+++++++++++++++++++++++++++++++                   | 61% ~03m 21s      
   |+++++++++++++++++++++++++++++++                   | 62% ~03m 16s      
   |++++++++++++++++++++++++++++++++                  | 63% ~03m 11s      
   |++++++++++++++++++++++++++++++++                  | 64% ~03m 06s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~03m 01s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 56s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 51s      
   |++++++++++++++++++++++++++++++++++                | 68% ~02m 46s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 40s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 35s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 30s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~02m 25s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 19s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~02m 14s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~02m 09s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~02m 04s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 59s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 54s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 48s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 43s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 38s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 33s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 28s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 22s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 17s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01m 12s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01m 07s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01m 02s      
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~57s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~52s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~46s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~41s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~36s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~26s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~21s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~15s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~10s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 08m 29s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~07m 21s      
   |+                                                 | 2 % ~07m 14s      
   |++                                                | 3 % ~07m 12s      
   |++                                                | 4 % ~07m 09s      
   |+++                                               | 5 % ~07m 03s      
   |+++                                               | 6 % ~07m 01s      
   |++++                                              | 7 % ~06m 56s      
   |++++                                              | 8 % ~06m 50s      
   |+++++                                             | 9 % ~06m 46s      
   |+++++                                             | 10% ~06m 58s      
   |++++++                                            | 11% ~06m 51s      
   |++++++                                            | 12% ~06m 45s      
   |+++++++                                           | 13% ~06m 39s      
   |+++++++                                           | 14% ~06m 33s      
   |++++++++                                          | 15% ~06m 28s      
   |++++++++                                          | 16% ~06m 23s      
   |+++++++++                                         | 17% ~06m 20s      
   |+++++++++                                         | 18% ~06m 14s      
   |++++++++++                                        | 19% ~06m 09s      
   |++++++++++                                        | 20% ~06m 04s      
   |+++++++++++                                       | 21% ~05m 59s      
   |+++++++++++                                       | 22% ~05m 55s      
   |++++++++++++                                      | 23% ~05m 50s      
   |++++++++++++                                      | 24% ~05m 45s      
   |+++++++++++++                                     | 25% ~05m 40s      
   |+++++++++++++                                     | 26% ~05m 36s      
   |++++++++++++++                                    | 27% ~05m 32s      
   |++++++++++++++                                    | 28% ~05m 27s      
   |+++++++++++++++                                   | 29% ~05m 22s      
   |+++++++++++++++                                   | 30% ~05m 18s      
   |++++++++++++++++                                  | 31% ~05m 13s      
   |++++++++++++++++                                  | 32% ~05m 08s      
   |+++++++++++++++++                                 | 33% ~05m 05s      
   |+++++++++++++++++                                | 34% ~05m 00s      
   |++++++++++++++++++                                | 35% ~04m 58s      
   |++++++++++++++++++                                | 36% ~04m 53s      
   |+++++++++++++++++++                               | 37% ~04m 48s      
   |+++++++++++++++++++                               | 38% ~04m 44s      
   |++++++++++++++++++++                              | 39% ~04m 39s      
   |++++++++++++++++++++                              | 40% ~04m 34s      
   |+++++++++++++++++++++                             | 41% ~04m 30s      
   |+++++++++++++++++++++                             | 42% ~04m 25s      
   |++++++++++++++++++++++                            | 43% ~04m 20s      
   |++++++++++++++++++++++                            | 44% ~04m 16s      
   |+++++++++++++++++++++++                           | 45% ~04m 12s      
   |+++++++++++++++++++++++                           | 46% ~04m 09s      
   |++++++++++++++++++++++++                          | 47% ~04m 04s      
   |++++++++++++++++++++++++                          | 48% ~03m 59s      
   |+++++++++++++++++++++++++                         | 49% ~03m 54s      
   |+++++++++++++++++++++++++                         | 50% ~03m 50s      
   |++++++++++++++++++++++++++                        | 51% ~03m 45s      
   |++++++++++++++++++++++++++                        | 52% ~03m 40s      
   |+++++++++++++++++++++++++++                       | 53% ~03m 36s      
   |+++++++++++++++++++++++++++                       | 54% ~03m 31s      
   |++++++++++++++++++++++++++++                      | 55% ~03m 26s      
   |++++++++++++++++++++++++++++                     | 56% ~03m 21s      
   |+++++++++++++++++++++++++++++                     | 57% ~03m 17s      
   |+++++++++++++++++++++++++++++                     | 58% ~03m 12s      
   |++++++++++++++++++++++++++++++                    | 59% ~03m 07s      
   |++++++++++++++++++++++++++++++                    | 60% ~03m 03s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 58s      
   |+++++++++++++++++++++++++++++++                   | 62% ~02m 54s      
   |++++++++++++++++++++++++++++++++                  | 63% ~02m 49s      
   |++++++++++++++++++++++++++++++++                  | 64% ~02m 44s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~02m 40s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~02m 35s      
   |++++++++++++++++++++++++++++++++++                | 67% ~02m 31s      
   |++++++++++++++++++++++++++++++++++               | 68% ~02m 26s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~02m 22s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~02m 17s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~02m 13s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~02m 08s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~02m 03s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 59s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 54s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 50s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 45s      
   |+++++++++++++++++++++++++++++++++++++++          | 78% ~01m 41s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 36s      
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~01m 32s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 27s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 23s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01m 18s      
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01m 14s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01m 09s      
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01m 04s      
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~60s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~55s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~50s          
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~46s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~41s          
   |++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~37s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~32s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~27s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~23s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~18s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~09s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~05s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 07m 35s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05m 36s      
   |++                                                | 2 % ~05m 41s      
   |++                                                | 3 % ~05m 31s      
   |+++                                               | 4 % ~05m 24s      
   |+++                                               | 5 % ~05m 17s      
   |++++                                              | 6 % ~05m 16s      
   |++++                                              | 7 % ~05m 11s      
   |+++++                                             | 8 % ~05m 07s      
   |+++++                                             | 9 % ~05m 20s      
   |++++++                                            | 10% ~05m 14s      
   |++++++                                            | 11% ~05m 10s      
   |+++++++                                           | 12% ~05m 05s      
   |+++++++                                           | 13% ~04m 60s      
   |++++++++                                          | 14% ~04m 55s      
   |++++++++                                          | 15% ~04m 51s      
   |+++++++++                                         | 16% ~04m 46s      
   |+++++++++                                         | 17% ~04m 43s      
   |++++++++++                                        | 18% ~04m 39s      
   |++++++++++                                        | 19% ~04m 34s      
   |+++++++++++                                       | 20% ~04m 30s      
   |+++++++++++                                       | 21% ~04m 26s      
   |++++++++++++                                      | 22% ~04m 23s      
   |++++++++++++                                      | 23% ~04m 19s      
   |+++++++++++++                                     | 24% ~04m 17s      
   |+++++++++++++                                     | 25% ~04m 13s      
   |++++++++++++++                                    | 26% ~04m 10s      
   |++++++++++++++                                    | 27% ~04m 06s      
   |+++++++++++++++                                   | 28% ~04m 03s      
   |+++++++++++++++                                   | 29% ~03m 59s      
   |++++++++++++++++                                  | 30% ~03m 56s      
   |++++++++++++++++                                  | 31% ~03m 52s      
   |+++++++++++++++++                                 | 32% ~03m 49s      
   |+++++++++++++++++                                 | 33% ~03m 45s      
   |++++++++++++++++++                                | 34% ~03m 42s      
   |++++++++++++++++++                                | 35% ~03m 38s      
   |+++++++++++++++++++                               | 36% ~03m 35s      
   |+++++++++++++++++++                               | 37% ~03m 32s      
   |++++++++++++++++++++                              | 38% ~03m 28s      
   |++++++++++++++++++++                              | 39% ~03m 24s      
   |+++++++++++++++++++++                             | 40% ~03m 23s      
   |+++++++++++++++++++++                             | 41% ~03m 19s      
   |++++++++++++++++++++++                            | 42% ~03m 16s      
   |++++++++++++++++++++++                            | 43% ~03m 12s      
   |+++++++++++++++++++++++                           | 44% ~03m 09s      
   |+++++++++++++++++++++++                           | 45% ~03m 05s      
   |++++++++++++++++++++++++                          | 46% ~03m 02s      
   |++++++++++++++++++++++++                          | 47% ~02m 58s      
   |+++++++++++++++++++++++++                         | 48% ~02m 55s      
   |+++++++++++++++++++++++++                         | 49% ~02m 51s      
   |++++++++++++++++++++++++++                        | 51% ~02m 48s      
   |++++++++++++++++++++++++++                        | 52% ~02m 45s      
   |+++++++++++++++++++++++++++                       | 53% ~02m 41s      
   |+++++++++++++++++++++++++++                       | 54% ~02m 38s      
   |++++++++++++++++++++++++++++                      | 55% ~02m 35s      
   |++++++++++++++++++++++++++++                      | 56% ~02m 32s      
   |+++++++++++++++++++++++++++++                     | 57% ~02m 28s      
   |+++++++++++++++++++++++++++++                     | 58% ~02m 25s      
   |++++++++++++++++++++++++++++++                    | 59% ~02m 21s      
   |++++++++++++++++++++++++++++++                    | 60% ~02m 17s      
   |+++++++++++++++++++++++++++++++                   | 61% ~02m 14s      
   |+++++++++++++++++++++++++++++++                   | 62% ~02m 10s      
   |++++++++++++++++++++++++++++++++                  | 63% ~02m 07s      
   |++++++++++++++++++++++++++++++++                  | 64% ~02m 03s      
   |+++++++++++++++++++++++++++++++++                 | 65% ~01m 60s      
   |+++++++++++++++++++++++++++++++++                 | 66% ~01m 56s      
   |++++++++++++++++++++++++++++++++++                | 67% ~01m 53s      
   |++++++++++++++++++++++++++++++++++                | 68% ~01m 50s      
   |+++++++++++++++++++++++++++++++++++               | 69% ~01m 46s      
   |+++++++++++++++++++++++++++++++++++               | 70% ~01m 43s      
   |++++++++++++++++++++++++++++++++++++              | 71% ~01m 39s      
   |++++++++++++++++++++++++++++++++++++              | 72% ~01m 36s      
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01m 32s      
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01m 29s      
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01m 26s      
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01m 22s      
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01m 19s      
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01m 16s      
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01m 12s      
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01m 09s      
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01m 05s      
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01m 02s      
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~59s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~55s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~52s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~48s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~45s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~41s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~38s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~35s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~31s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~28s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~24s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~21s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~17s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~14s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~10s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~07s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~03s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05m 38s
head(tiss.markers)

Display the top markers you computed above.

tiss.markers %>% group_by(cluster) %>% top_n(5, avg_logFC)

Assigning cell type identity to clusters

At a coarse level, we can use canonical markers to match the unbiased clustering to known cell types:

0: alpha 1: beta 2: beta 3: exocrine 4: duct 5: delta 6: gamma 7: endothelial 8: immune 9: stellate

# stash current cluster IDs
tiss <- StashIdent(object = tiss, save.name = "cluster.ids")
# enumerate current cluster IDs and the labels for them
cluster.ids <- c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
free_annotation <- c()
cell_ontology_class <-c("naive B", "hematopoietic precursor", "pre-B", "hematopoietic oligopotent progenitor", "granulocyte", "neutrophil", "immature B", "monocyte", "late pro-B", "pro T_NKT", "neutrophil progenitor", "hematopoietic precursor", "CD4-positive helper T")
cell_ontology_id <- c("CL:0000788", "CL:0008001", "CL:0000817", "CL:0000837", "CL:0000094", "CL:0000775", "CL:0000816", "CL:0000576", "CL:0002048", NA, "CL:0000834", "CL:0008001", "CL:0000492")
  
tiss@meta.data[,'free_annotation'] <- NA
tiss@meta.data[,'cell_ontology_class'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_class)
tiss@meta.data[,'cell_ontology_id'] <- plyr::mapvalues(x = tiss@ident, from = cluster.ids, to = cell_ontology_id)
tiss@meta.data[tiss@cell.names,'cell_ontology_class'] <- as.character(tiss@meta.data$cell_ontology_class)
tiss@meta.data[tiss@cell.names,'cell_ontology_id'] <- as.character(tiss@meta.data$cell_ontology_id)
TSNEPlot(object = tiss, do.label = TRUE, pt.size = 0.5, group.by='cell_ontology_class')

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = tiss, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(tiss@ident), as.character(tiss@meta.data$plate.barcode))
    
     D041912 D042044 D042193 D042467 D042479 D045139 D045140 MAA000409 MAA000596 MAA000600 MAA000639 MAA000652
  0       76      52      55      41      54       0       1         3         0        36        61        24
  1        0       0       1       0       0       0      95       181        73         0         0       119
  10       0      33      34       1       0      23      36         0        20        29         2         1
  11       0       0       0       0       0       0       0         1         3         0         0         7
  12      29       5       2       0      15       0       0         0         0        25        17         4
  2       46      24      21      24      59       0       0         0         0        76        82        23
  3        0       2       2       0       0       0      65        73        33         0         0        86
  4        2      30      41       2       1      56      78         0        36        28         4         1
  5        0      44      32       2       0      32      45         0        62        54         0         2
  6       39      21      29      19      32       0       1         0         0        28        44        10
  7        1      28      31       2       3      24      26         0        25        21         4         4
  8       76      14       5       2      81       0       0         0         0        31        14         3
  9        0      44      46      36       3       1       0         0         0         0        43        24
    
     MAA000844 MAA000848 MAA001842 MAA001844 MAA001883 MAA001884 MAA001887 MAA001888
  0          0         0        38         5        37       166         3        27
  1         80         1         0         5         0         0       116         0
  10        14        10         0         3         0         0         1         0
  11         1         2         0       165         0         0         7         1
  12         0         0         0         0        26        37         0        12
  2          0         0         3         0       103        50         0         3
  3         56         0         0        25         0         0        93         3
  4         29        83         0         0         0         0         0         0
  5         37        59         0         0         0         0         0         0
  6          0         0         6         2        47        70         3         7
  7         43        60         3        28         0         1        17         8
  8          0         0         1         1        33        22         8         1
  9          3         1         4         3         2         2         1        77

Subset and iterate

We can repeat the above analysis on a subset of cells, defined using cluster IDs or some other metadata. This is a good way to drill down and find substructure.

Subset == T and NK cells (Cluster 9)

# Subset data based on cluster id
subtiss9 <- SubsetData(object = tiss, ident.use = c(9), do.center = F, do.scale = F, cells.use = )
# To subset data based on cell_ontology_class or other metadata, you can explicitly pass cell names
# anno = 'exocrine cells'
# cells.to.use = tiss@cell.names[which(tiss@meta.data$cell_ontology_class == anno)]
# subtiss9 <- SubsetData(object = tiss, cells.use = cells.to.use, do.center = F, do.scale = F)
subtiss9 <- NormalizeData(object = subtiss9)
Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
subtiss9 <- ScaleData(object = subtiss9, vars.to.regress = c("nReads", "percent.ribo","Rn45s"))
[1] "Regressing out nReads"       "Regressing out percent.ribo" "Regressing out Rn45s"       

  |                                                                                                                  
  |                                                                                                            |   0%
  |                                                                                                                  
  |=                                                                                                           |   1%
  |                                                                                                                  
  |==                                                                                                          |   2%
  |                                                                                                                  
  |===                                                                                                         |   3%
  |                                                                                                                  
  |====                                                                                                        |   3%
  |                                                                                                                  
  |====                                                                                                        |   4%
  |                                                                                                                  
  |=====                                                                                                       |   5%
  |                                                                                                                  
  |======                                                                                                      |   5%
  |                                                                                                                  
  |======                                                                                                      |   6%
  |                                                                                                                  
  |=======                                                                                                     |   6%
  |                                                                                                                  
  |=======                                                                                                     |   7%
  |                                                                                                                  
  |========                                                                                                    |   7%
  |                                                                                                                  
  |=========                                                                                                   |   8%
  |                                                                                                                  
  |=========                                                                                                   |   9%
  |                                                                                                                  
  |==========                                                                                                  |   9%
  |                                                                                                                  
  |==========                                                                                                  |  10%
  |                                                                                                                  
  |===========                                                                                                 |  10%
  |                                                                                                                  
  |============                                                                                                |  11%
  |                                                                                                                  
  |=============                                                                                               |  12%
  |                                                                                                                  
  |==============                                                                                              |  13%
  |                                                                                                                  
  |===============                                                                                             |  14%
  |                                                                                                                  
  |================                                                                                            |  15%
  |                                                                                                                  
  |=================                                                                                           |  15%
  |                                                                                                                  
  |=================                                                                                           |  16%
  |                                                                                                                  
  |==================                                                                                          |  17%
  |                                                                                                                  
  |===================                                                                                         |  17%
  |                                                                                                                  
  |===================                                                                                         |  18%
  |                                                                                                                  
  |====================                                                                                        |  18%
  |                                                                                                                  
  |====================                                                                                        |  19%
  |                                                                                                                  
  |=====================                                                                                       |  19%
  |                                                                                                                  
  |======================                                                                                      |  20%
  |                                                                                                                  
  |======================                                                                                      |  21%
  |                                                                                                                  
  |=======================                                                                                     |  21%
  |                                                                                                                  
  |=======================                                                                                     |  22%
  |                                                                                                                  
  |========================                                                                                    |  22%
  |                                                                                                                  
  |=========================                                                                                   |  23%
  |                                                                                                                  
  |==========================                                                                                  |  24%
  |                                                                                                                  
  |===========================                                                                                 |  25%
  |                                                                                                                  
  |============================                                                                                |  26%
  |                                                                                                                  
  |=============================                                                                               |  27%
  |                                                                                                                  
  |==============================                                                                              |  27%
  |                                                                                                                  
  |==============================                                                                              |  28%
  |                                                                                                                  
  |===============================                                                                             |  29%
  |                                                                                                                  
  |================================                                                                            |  30%
  |                                                                                                                  
  |=================================                                                                           |  30%
  |                                                                                                                  
  |=================================                                                                           |  31%
  |                                                                                                                  
  |==================================                                                                          |  31%
  |                                                                                                                  
  |===================================                                                                         |  32%
  |                                                                                                                  
  |===================================                                                                         |  33%
  |                                                                                                                  
  |====================================                                                                        |  33%
  |                                                                                                                  
  |====================================                                                                        |  34%
  |                                                                                                                  
  |=====================================                                                                       |  34%
  |                                                                                                                  
  |======================================                                                                      |  35%
  |                                                                                                                  
  |=======================================                                                                     |  36%
  |                                                                                                                  
  |=======================================                                                                     |  37%
  |                                                                                                                  
  |========================================                                                                    |  37%
  |                                                                                                                  
  |=========================================                                                                   |  38%
  |                                                                                                                  
  |==========================================                                                                  |  39%
  |                                                                                                                  
  |===========================================                                                                 |  39%
  |                                                                                                                  
  |===========================================                                                                 |  40%
  |                                                                                                                  
  |============================================                                                                |  41%
  |                                                                                                                  
  |=============================================                                                               |  42%
  |                                                                                                                  
  |==============================================                                                              |  42%
  |                                                                                                                  
  |==============================================                                                              |  43%
  |                                                                                                                  
  |===============================================                                                             |  43%
  |                                                                                                                  
  |================================================                                                            |  44%
  |                                                                                                                  
  |================================================                                                            |  45%
  |                                                                                                                  
  |=================================================                                                           |  45%
  |                                                                                                                  
  |=================================================                                                           |  46%
  |                                                                                                                  
  |==================================================                                                          |  46%
  |                                                                                                                  
  |===================================================                                                         |  47%
  |                                                                                                                  
  |====================================================                                                        |  48%
  |                                                                                                                  
  |====================================================                                                        |  49%
  |                                                                                                                  
  |=====================================================                                                       |  49%
  |                                                                                                                  
  |======================================================                                                      |  50%
  |                                                                                                                  
  |=======================================================                                                     |  51%
  |                                                                                                                  
  |========================================================                                                    |  51%
  |                                                                                                                  
  |========================================================                                                    |  52%
  |                                                                                                                  
  |=========================================================                                                   |  53%
  |                                                                                                                  
  |==========================================================                                                  |  54%
  |                                                                                                                  
  |===========================================================                                                 |  54%
  |                                                                                                                  
  |===========================================================                                                 |  55%
  |                                                                                                                  
  |============================================================                                                |  55%
  |                                                                                                                  
  |============================================================                                                |  56%
  |                                                                                                                  
  |=============================================================                                               |  57%
  |                                                                                                                  
  |==============================================================                                              |  57%
  |                                                                                                                  
  |==============================================================                                              |  58%
  |                                                                                                                  
  |===============================================================                                             |  58%
  |                                                                                                                  
  |================================================================                                            |  59%
  |                                                                                                                  
  |=================================================================                                           |  60%
  |                                                                                                                  
  |=================================================================                                           |  61%
  |                                                                                                                  
  |==================================================================                                          |  61%
  |                                                                                                                  
  |===================================================================                                         |  62%
  |                                                                                                                  
  |====================================================================                                        |  63%
  |                                                                                                                  
  |=====================================================================                                       |  63%
  |                                                                                                                  
  |=====================================================================                                       |  64%
  |                                                                                                                  
  |======================================================================                                      |  65%
  |                                                                                                                  
  |=======================================================================                                     |  66%
  |                                                                                                                  
  |========================================================================                                    |  66%
  |                                                                                                                  
  |========================================================================                                    |  67%
  |                                                                                                                  
  |=========================================================================                                   |  67%
  |                                                                                                                  
  |=========================================================================                                   |  68%
  |                                                                                                                  
  |==========================================================================                                  |  69%
  |                                                                                                                  
  |===========================================================================                                 |  69%
  |                                                                                                                  
  |===========================================================================                                 |  70%
  |                                                                                                                  
  |============================================================================                                |  70%
  |                                                                                                                  
  |=============================================================================                               |  71%
  |                                                                                                                  
  |==============================================================================                              |  72%
  |                                                                                                                  
  |==============================================================================                              |  73%
  |                                                                                                                  
  |===============================================================================                             |  73%
  |                                                                                                                  
  |================================================================================                            |  74%
  |                                                                                                                  
  |=================================================================================                           |  75%
  |                                                                                                                  
  |==================================================================================                          |  76%
  |                                                                                                                  
  |===================================================================================                         |  77%
  |                                                                                                                  
  |====================================================================================                        |  78%
  |                                                                                                                  
  |=====================================================================================                       |  78%
  |                                                                                                                  
  |=====================================================================================                       |  79%
  |                                                                                                                  
  |======================================================================================                      |  79%
  |                                                                                                                  
  |======================================================================================                      |  80%
  |                                                                                                                  
  |=======================================================================================                     |  81%
  |                                                                                                                  
  |========================================================================================                    |  81%
  |                                                                                                                  
  |========================================================================================                    |  82%
  |                                                                                                                  
  |=========================================================================================                   |  82%
  |                                                                                                                  
  |=========================================================================================                   |  83%
  |                                                                                                                  
  |==========================================================================================                  |  83%
  |                                                                                                                  
  |===========================================================================================                 |  84%
  |                                                                                                                  
  |===========================================================================================                 |  85%
  |                                                                                                                  
  |============================================================================================                |  85%
  |                                                                                                                  
  |=============================================================================================               |  86%
  |                                                                                                                  
  |==============================================================================================              |  87%
  |                                                                                                                  
  |===============================================================================================             |  88%
  |                                                                                                                  
  |================================================================================================            |  89%
  |                                                                                                                  
  |=================================================================================================           |  90%
  |                                                                                                                  
  |==================================================================================================          |  90%
  |                                                                                                                  
  |==================================================================================================          |  91%
  |                                                                                                                  
  |===================================================================================================         |  91%
  |                                                                                                                  
  |===================================================================================================         |  92%
  |                                                                                                                  
  |====================================================================================================        |  93%
  |                                                                                                                  
  |=====================================================================================================       |  93%
  |                                                                                                                  
  |=====================================================================================================       |  94%
  |                                                                                                                  
  |======================================================================================================      |  94%
  |                                                                                                                  
  |======================================================================================================      |  95%
  |                                                                                                                  
  |=======================================================================================================     |  95%
  |                                                                                                                  
  |========================================================================================================    |  96%
  |                                                                                                                  
  |========================================================================================================    |  97%
  |                                                                                                                  
  |=========================================================================================================   |  97%
  |                                                                                                                  
  |==========================================================================================================  |  98%
  |                                                                                                                  
  |=========================================================================================================== |  99%
  |                                                                                                                  
  |============================================================================================================| 100%
[1] "Scaling data matrix"

  |                                                                                                                  
  |                                                                                                            |   0%
  |                                                                                                                  
  |============================================================================================================| 100%
subtiss9 <- FindVariableGenes(object = subtiss9, do.plot = TRUE, x.high.cutoff = Inf, y.cutoff = 0.8)
Calculating gene means
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variance to mean ratios
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|

subtiss9 <- RunPCA(object = subtiss9, pcs.compute = 20)
[1] "PC1"
 [1] "Serpinb9"  "Ncr1"      "Nkg7"      "Gzma"      "Klrb1c"    "Klrk1"     "Prf1"      "Eomes"     "Klri2"    
[10] "Id2"       "Klrb1a"    "Ccl5"      "Ctla2a"    "Serpinb6b" "Car2"      "Ccr5"      "Txk"       "Klra8"    
[19] "Serpina3g" "Ifngr1"    "Fasl"      "Xcl1"      "Tmem37"    "Gem"       "Klra9"     "Ccr2"      "Tigit"    
[28] "Cenpf"     "Gzmb"      "Klra7"    
[1] ""
 [1] "Cd63"    "Gata2"   "Alox5ap" "Csf2rb"  "Cd200r3" "Hdc"     "Cyp11a1" "Cebpa"   "Ms4a2"   "Fcer1a"  "Ccr1"   
[12] "Cyp4f18" "Cpa3"    "Emilin2" "Alox5"   "Ptplad2" "Gpr97"   "Mcpt8"   "Alox15"  "Itga2b"  "Slc41a3" "Ccl9"   
[23] "Ifitm1"  "Stx3"    "Ncf2"    "Gp49a"   "Cxcr2"   "Cdh1"    "Nfam1"   "Ncf1"   
[1] ""
[1] ""
[1] "PC2"
 [1] "Cd74"     "Malat1"   "Cd79a"    "Ctla4"    "Ly6d"     "Cd79b"    "H2-Ab1"   "H2-Aa"    "Cd19"     "H2-Eb1"  
[11] "Foxp3"    "Ms4a1"    "Spib"     "Faim3"    "Fcrla"    "H2-DMb2"  "Ifi27l2a" "Cpm"      "Sdc4"     "Pou2af1" 
[21] "Il7r"     "Cd4"      "Ly6a"     "Tnfrsf4"  "Bank1"    "H2-Ob"    "Cd81"     "Siglecg"  "Cd5"      "Fcrl1"   
[1] ""
 [1] "Tyrobp"        "Top2a"         "Anxa2"         "Ccna2"         "2810417H13Rik" "Stmn1"         "Birc5"        
 [8] "Mki67"         "Cdk1"          "Hmgb2"         "Tpx2"          "Kif11"         "Aurkb"         "Tacc3"        
[15] "Cdca8"         "Hist1h2ab"     "Spc25"         "Hist1h2ae"     "Nkg7"          "Cdca3"         "Rrm2"         
[22] "Tk1"           "Plk1"          "Ccnb2"         "Asf1b"         "Car2"          "Klri2"         "Gzma"         
[29] "Cenpf"         "Kif22"        
[1] ""
[1] ""
[1] "PC3"
 [1] "Ccna2"         "Top2a"         "2810417H13Rik" "Mki67"         "Rrm2"          "Cdca3"         "Tpx2"         
 [8] "Birc5"         "Cdk1"          "Cdca8"         "Aurkb"         "Kif11"         "Plk1"          "Kif22"        
[15] "Hist1h2ab"     "Hist1h2ae"     "Stmn1"         "Bub1b"         "Spc25"         "Ccnb2"         "Cdc45"        
[22] "Tk1"           "Uhrf1"         "Asf1b"         "Tacc3"         "Tubb5"         "Ube2c"         "Cenpe"        
[29] "Kif20a"        "Ccnb1"        
[1] ""
 [1] "Ccl5"     "Tyrobp"   "Klrb1c"   "Nkg7"     "Id2"      "Prf1"     "Ncr1"     "Klrk1"    "Anxa2"    "Gzma"    
[11] "Klra8"    "Ctla2a"   "Xcl1"     "Serpinb9" "Gzmb"     "Fasl"     "Cd7"      "S1pr5"    "Klra18"   "Itgam"   
[21] "Ifngr1"   "Bhlhe40"  "Anxa1"    "Cma1"     "Plek"     "Styk1"    "F2rl2"    "Eomes"    "Ccr2"     "Ccl4"    
[1] ""
[1] ""
[1] "PC4"
 [1] "Ly6d"      "Cd79a"     "H2-Aa"     "H2-DMb2"   "H2-Ab1"    "Faim3"     "Cd19"      "H2-Eb1"    "Cd79b"    
[10] "Cd74"      "Ms4a1"     "Ly86"      "Spib"      "Tnfrsf13c" "Fcrla"     "Pou2af1"   "Bank1"     "Siglecg"  
[19] "Fcrl1"     "Unc93b1"   "Blnk"      "Fcer2a"    "Irf8"      "Vpreb3"    "Ebf1"      "Cd24a"     "Cd55"     
[28] "H2-Ob"     "Cd22"      "Ctsh"     
[1] ""
 [1] "Cd5"     "Folr4"   "Cd6"     "Il7r"    "Inpp4b"  "Il2ra"   "Ctla4"   "Cd8b1"   "Il6ra"   "Cd4"     "Dgka"   
[12] "Cish"    "Ikzf2"   "Foxp3"   "Tnfrsf4" "Ddb2"    "Cd8a"    "Fam129a" "Nrp1"    "Klk8"    "Fam46c"  "Gbp2"   
[23] "Il6st"   "Sit1"    "Tcf7"    "Art2b"   "Als2cl"  "Ski"     "Ldhb"    "Ecm1"   
[1] ""
[1] ""
[1] "PC5"
 [1] "Gstm1"   "Lat2"    "Gtf2i"   "Add3"    "Emilin2" "Sesn1"   "Ccl3"    "Rfx7"    "Cdh1"    "Cd200r3" "Fcer1a" 
[12] "Gns"     "Ip6k1"   "Gata2"   "Il17ra"  "Cyp11a1" "Ccl9"    "Mcpt8"   "Il10ra"  "Ms4a2"   "Tcf7"    "Invs"   
[23] "Cpa3"    "Eif2s3y" "Itga2b"  "Alox15"  "Npl"     "Ifitm1"  "P2ry1"   "Pafah2" 
[1] ""
 [1] "Chi3l1"        "1100001G20Rik" "Cd177"         "Hp"            "Lyz2"          "S100a8"        "S100a9"       
 [8] "Lcn2"          "Ifitm6"        "Chi3l3"        "Ngp"           "Camp"          "Ltf"           "Plbd1"        
[15] "Retnlg"        "Mmp9"          "Gda"           "Cybb"          "Ifitm3"        "Adpgk"         "Hck"          
[22] "C5ar1"         "Glrx"          "Cd24a"         "Slpi"          "Rnf144a"       "Dstn"          "Ncf1"         
[29] "Adam8"         "Ly6c2"        
[1] ""
[1] ""
subtiss9 <- ProjectPCA(object = subtiss9, do.print = FALSE)

Run Principal Component Analysis.

subtiss9 <- RunPCA(object = subtiss9, do.print = FALSE)
subtiss9 <- ProjectPCA(object = subtiss9, do.print = FALSE)
# If this fails for your subset, it may be that cells.use is more cells than you have left! Try reducing it.
PCHeatmap(object = subtiss9, pc.use = 1:3, cells.use = 250, do.balanced = TRUE, label.columns = FALSE, num.genes = 12)

Later on (in FindClusters and TSNE) you will pick a number of principal components to use. This has the effect of keeping the major directions of variation in the data and, ideally, supressing noise. There is no correct answer to the number to use, but a decent rule of thumb is to go until the plot plateaus.

PCElbowPlot(object = subtiss9)

Choose the number of principal components to use.

# Set number of principal components. 
sub9.n.pcs = 5

The clustering is performed based on a nearest neighbors graph. Cells that have similar expression will be joined together. The Louvain algorithm looks for groups of cells with high modularity–more connections within the group than between groups. The resolution parameter determines the scale…higher resolution will give more clusters, lower resolution will give fewer.

# Set resolution 
sub.res.used <- 1
subtiss9 <- FindClusters(object = subtiss9, reduction.type = "pca", dims.use = 1:sub9.n.pcs, 
    resolution = sub.res.used, print.output = 0, save.SNN = TRUE)

To visualize

# If cells are too spread out, you can raise the perplexity. If you have few cells, try a lower perplexity (but never less than 10).
subtiss9 <- RunTSNE(object = subtiss9, dims.use = 1:sub9.n.pcs, seed.use = 10, perplexity=30)
# note that you can set do.label=T to help label individual clusters
TSNEPlot(object = subtiss9, do.label = T)

subtiss9.markers <- FindAllMarkers(object = subtiss9, only.pos = TRUE, min.pct = 0.25, thresh.use = 0.25)

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05s          
   |++                                                | 2 % ~05s          
   |++                                                | 3 % ~04s          
   |+++                                               | 4 % ~04s          
   |+++                                               | 5 % ~04s          
   |++++                                              | 6 % ~04s          
   |++++                                              | 7 % ~04s          
   |+++++                                             | 9 % ~04s          
   |+++++                                             | 10% ~04s          
   |++++++                                            | 11% ~04s          
   |++++++                                            | 12% ~04s          
   |+++++++                                           | 13% ~04s          
   |+++++++                                           | 14% ~04s          
   |++++++++                                          | 15% ~04s          
   |++++++++                                          | 16% ~04s          
   |+++++++++                                         | 17% ~04s          
   |++++++++++                                        | 18% ~04s          
   |++++++++++                                        | 19% ~03s          
   |+++++++++++                                       | 20% ~03s          
   |+++++++++++                                       | 21% ~03s          
   |++++++++++++                                      | 22% ~03s          
   |++++++++++++                                      | 23% ~03s          
   |+++++++++++++                                     | 24% ~03s          
   |+++++++++++++                                     | 26% ~03s          
   |++++++++++++++                                    | 27% ~03s          
   |++++++++++++++                                    | 28% ~03s          
   |+++++++++++++++                                   | 29% ~03s          
   |+++++++++++++++                                   | 30% ~03s          
   |++++++++++++++++                                  | 31% ~03s          
   |++++++++++++++++                                  | 32% ~03s          
   |+++++++++++++++++                                 | 33% ~03s          
   |++++++++++++++++++                                | 34% ~03s          
   |++++++++++++++++++                                | 35% ~03s          
   |+++++++++++++++++++                               | 36% ~03s          
   |+++++++++++++++++++                               | 37% ~03s          
   |++++++++++++++++++++                              | 38% ~03s          
   |++++++++++++++++++++                              | 39% ~03s          
   |+++++++++++++++++++++                             | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |++++++++++++++++++++++                            | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |++++++++++++++++++++++++                          | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |+++++++++++++++++++++++++                         | 50% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |+++++++++++++++++++++++++++                       | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |++++++++++++++++++++++++++++++                    | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |+++++++++++++++++++++++++++++++                   | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |++++++++++++++++++++++++++++++++                  | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~03s          
   |++                                                | 2 % ~04s          
   |++                                                | 3 % ~04s          
   |+++                                               | 4 % ~04s          
   |+++                                               | 5 % ~04s          
   |++++                                              | 6 % ~03s          
   |++++                                              | 7 % ~03s          
   |+++++                                             | 8 % ~03s          
   |+++++                                             | 9 % ~03s          
   |++++++                                            | 10% ~03s          
   |++++++                                            | 11% ~03s          
   |+++++++                                           | 12% ~03s          
   |+++++++                                           | 13% ~03s          
   |++++++++                                          | 14% ~03s          
   |++++++++                                          | 15% ~03s          
   |+++++++++                                         | 16% ~03s          
   |+++++++++                                         | 17% ~03s          
   |++++++++++                                        | 18% ~03s          
   |++++++++++                                        | 19% ~03s          
   |+++++++++++                                       | 20% ~03s          
   |+++++++++++                                       | 21% ~03s          
   |++++++++++++                                      | 22% ~03s          
   |++++++++++++                                      | 23% ~03s          
   |+++++++++++++                                     | 24% ~03s          
   |+++++++++++++                                     | 26% ~03s          
   |++++++++++++++                                    | 27% ~03s          
   |++++++++++++++                                    | 28% ~03s          
   |+++++++++++++++                                   | 29% ~03s          
   |+++++++++++++++                                   | 30% ~03s          
   |++++++++++++++++                                  | 31% ~03s          
   |++++++++++++++++                                  | 32% ~03s          
   |+++++++++++++++++                                 | 33% ~03s          
   |+++++++++++++++++                                 | 34% ~03s          
   |++++++++++++++++++                                | 35% ~02s          
   |++++++++++++++++++                                | 36% ~02s          
   |+++++++++++++++++++                               | 37% ~02s          
   |+++++++++++++++++++                               | 38% ~02s          
   |++++++++++++++++++++                              | 39% ~02s          
   |++++++++++++++++++++                              | 40% ~02s          
   |+++++++++++++++++++++                             | 41% ~02s          
   |+++++++++++++++++++++                             | 42% ~02s          
   |++++++++++++++++++++++                            | 43% ~02s          
   |++++++++++++++++++++++                            | 44% ~02s          
   |+++++++++++++++++++++++                           | 45% ~02s          
   |+++++++++++++++++++++++                           | 46% ~02s          
   |++++++++++++++++++++++++                          | 47% ~02s          
   |++++++++++++++++++++++++                          | 48% ~02s          
   |+++++++++++++++++++++++++                         | 49% ~02s          
   |+++++++++++++++++++++++++                         | 50% ~02s          
   |++++++++++++++++++++++++++                        | 51% ~02s          
   |+++++++++++++++++++++++++++                       | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |+++++++++++++++++++++++++++++++                   | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~01s          
   |++++++++++++++++++++++++++++++++                  | 62% ~01s          
   |++++++++++++++++++++++++++++++++                  | 63% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
   |++++++++++++++++++++++++++++++++++                | 66% ~01s          
   |++++++++++++++++++++++++++++++++++                | 67% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 04s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05s          
   |++                                                | 2 % ~05s          
   |++                                                | 3 % ~05s          
   |+++                                               | 4 % ~05s          
   |+++                                               | 5 % ~05s          
   |++++                                              | 7 % ~05s          
   |++++                                              | 8 % ~05s          
   |+++++                                             | 9 % ~05s          
   |+++++                                             | 10% ~05s          
   |++++++                                            | 11% ~05s          
   |+++++++                                           | 12% ~04s          
   |+++++++                                           | 13% ~04s          
   |++++++++                                          | 14% ~04s          
   |++++++++                                          | 15% ~04s          
   |+++++++++                                         | 16% ~04s          
   |+++++++++                                         | 18% ~04s          
   |++++++++++                                        | 19% ~04s          
   |++++++++++                                        | 20% ~04s          
   |+++++++++++                                       | 21% ~04s          
   |+++++++++++                                       | 22% ~04s          
   |++++++++++++                                      | 23% ~04s          
   |+++++++++++++                                     | 24% ~04s          
   |+++++++++++++                                     | 25% ~04s          
   |++++++++++++++                                    | 26% ~04s          
   |++++++++++++++                                    | 27% ~04s          
   |+++++++++++++++                                   | 29% ~04s          
   |+++++++++++++++                                   | 30% ~04s          
   |++++++++++++++++                                  | 31% ~03s          
   |++++++++++++++++                                  | 32% ~03s          
   |+++++++++++++++++                                 | 33% ~03s          
   |++++++++++++++++++                                | 34% ~03s          
   |++++++++++++++++++                                | 35% ~03s          
   |+++++++++++++++++++                               | 36% ~03s          
   |+++++++++++++++++++                               | 37% ~03s          
   |++++++++++++++++++++                              | 38% ~03s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |+++++++++++++++++++++                             | 42% ~03s          
   |++++++++++++++++++++++                            | 43% ~03s          
   |++++++++++++++++++++++                            | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |++++++++++++++++++++++++                          | 46% ~03s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |+++++++++++++++++++++++++                         | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |++++++++++++++++++++++++++                        | 52% ~02s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |+++++++++++++++++++++++++++                       | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |+++++++++++++++++++++++++++++++                   | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |++++++++++++++++++++++++++++++++                  | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~05s          
   |++                                                | 2 % ~08s          
   |++                                                | 3 % ~07s          
   |+++                                               | 4 % ~06s          
   |+++                                               | 5 % ~06s          
   |++++                                              | 6 % ~05s          
   |++++                                              | 7 % ~05s          
   |+++++                                             | 8 % ~05s          
   |+++++                                             | 9 % ~05s          
   |++++++                                            | 10% ~05s          
   |++++++                                            | 11% ~05s          
   |+++++++                                           | 12% ~05s          
   |+++++++                                           | 13% ~04s          
   |++++++++                                          | 14% ~04s          
   |++++++++                                          | 15% ~04s          
   |+++++++++                                         | 16% ~04s          
   |+++++++++                                         | 17% ~04s          
   |++++++++++                                        | 18% ~04s          
   |++++++++++                                        | 19% ~04s          
   |+++++++++++                                       | 20% ~04s          
   |+++++++++++                                       | 21% ~04s          
   |++++++++++++                                      | 22% ~04s          
   |++++++++++++                                      | 23% ~04s          
   |+++++++++++++                                     | 24% ~04s          
   |+++++++++++++                                     | 26% ~04s          
   |++++++++++++++                                    | 27% ~04s          
   |++++++++++++++                                    | 28% ~04s          
   |+++++++++++++++                                   | 29% ~04s          
   |+++++++++++++++                                   | 30% ~04s          
   |++++++++++++++++                                  | 31% ~04s          
   |++++++++++++++++                                  | 32% ~04s          
   |+++++++++++++++++                                 | 33% ~03s          
   |+++++++++++++++++                                 | 34% ~03s          
   |++++++++++++++++++                                | 35% ~03s          
   |++++++++++++++++++                                | 36% ~03s          
   |+++++++++++++++++++                               | 37% ~03s          
   |+++++++++++++++++++                               | 38% ~03s          
   |++++++++++++++++++++                              | 39% ~03s          
   |++++++++++++++++++++                              | 40% ~03s          
   |+++++++++++++++++++++                             | 41% ~03s          
   |+++++++++++++++++++++                             | 42% ~03s          
   |++++++++++++++++++++++                            | 43% ~03s          
   |++++++++++++++++++++++                            | 44% ~03s          
   |+++++++++++++++++++++++                           | 45% ~03s          
   |+++++++++++++++++++++++                           | 46% ~03s          
   |++++++++++++++++++++++++                          | 47% ~03s          
   |++++++++++++++++++++++++                          | 48% ~03s          
   |+++++++++++++++++++++++++                         | 49% ~03s          
   |+++++++++++++++++++++++++                         | 50% ~03s          
   |++++++++++++++++++++++++++                        | 51% ~03s          
   |+++++++++++++++++++++++++++                       | 52% ~03s          
   |+++++++++++++++++++++++++++                       | 53% ~02s          
   |++++++++++++++++++++++++++++                      | 54% ~02s          
   |++++++++++++++++++++++++++++                      | 55% ~02s          
   |+++++++++++++++++++++++++++++                     | 56% ~02s          
   |+++++++++++++++++++++++++++++                     | 57% ~02s          
   |++++++++++++++++++++++++++++++                    | 58% ~02s          
   |++++++++++++++++++++++++++++++                    | 59% ~02s          
   |+++++++++++++++++++++++++++++++                   | 60% ~02s          
   |+++++++++++++++++++++++++++++++                   | 61% ~02s          
   |++++++++++++++++++++++++++++++++                  | 62% ~02s          
   |++++++++++++++++++++++++++++++++                  | 63% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~02s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~02s          
   |++++++++++++++++++++++++++++++++++                | 66% ~02s          
   |++++++++++++++++++++++++++++++++++                | 67% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~02s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~02s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 05s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~16s          
   |++                                                | 2 % ~12s          
   |++                                                | 3 % ~11s          
   |+++                                               | 4 % ~11s          
   |+++                                               | 5 % ~10s          
   |++++                                              | 6 % ~10s          
   |++++                                              | 7 % ~10s          
   |+++++                                             | 8 % ~09s          
   |+++++                                             | 9 % ~09s          
   |++++++                                            | 10% ~09s          
   |++++++                                            | 11% ~09s          
   |+++++++                                           | 12% ~09s          
   |+++++++                                           | 14% ~09s          
   |++++++++                                          | 15% ~09s          
   |++++++++                                          | 16% ~08s          
   |+++++++++                                         | 17% ~08s          
   |+++++++++                                         | 18% ~08s          
   |++++++++++                                        | 19% ~08s          
   |++++++++++                                        | 20% ~08s          
   |+++++++++++                                       | 21% ~08s          
   |+++++++++++                                       | 22% ~08s          
   |++++++++++++                                      | 23% ~08s          
   |++++++++++++                                      | 24% ~08s          
   |+++++++++++++                                     | 25% ~08s          
   |++++++++++++++                                    | 26% ~07s          
   |++++++++++++++                                    | 27% ~07s          
   |+++++++++++++++                                   | 28% ~07s          
   |+++++++++++++++                                   | 29% ~07s          
   |++++++++++++++++                                  | 30% ~07s          
   |++++++++++++++++                                  | 31% ~07s          
   |+++++++++++++++++                                 | 32% ~07s          
   |+++++++++++++++++                                 | 33% ~07s          
   |++++++++++++++++++                                | 34% ~07s          
   |++++++++++++++++++                                | 35% ~06s          
   |+++++++++++++++++++                               | 36% ~06s          
   |+++++++++++++++++++                               | 38% ~06s          
   |++++++++++++++++++++                              | 39% ~06s          
   |++++++++++++++++++++                              | 40% ~06s          
   |+++++++++++++++++++++                             | 41% ~06s          
   |+++++++++++++++++++++                             | 42% ~06s          
   |++++++++++++++++++++++                            | 43% ~06s          
   |++++++++++++++++++++++                            | 44% ~06s          
   |+++++++++++++++++++++++                           | 45% ~06s          
   |+++++++++++++++++++++++                           | 46% ~05s          
   |++++++++++++++++++++++++                          | 47% ~05s          
   |++++++++++++++++++++++++                          | 48% ~05s          
   |+++++++++++++++++++++++++                         | 49% ~05s          
   |+++++++++++++++++++++++++                         | 50% ~05s          
   |++++++++++++++++++++++++++                        | 51% ~05s          
   |+++++++++++++++++++++++++++                       | 52% ~05s          
   |+++++++++++++++++++++++++++                       | 53% ~05s          
   |++++++++++++++++++++++++++++                      | 54% ~05s          
   |++++++++++++++++++++++++++++                      | 55% ~05s          
   |+++++++++++++++++++++++++++++                     | 56% ~04s          
   |+++++++++++++++++++++++++++++                     | 57% ~04s          
   |++++++++++++++++++++++++++++++                    | 58% ~04s          
   |++++++++++++++++++++++++++++++                    | 59% ~04s          
   |+++++++++++++++++++++++++++++++                   | 60% ~04s          
   |+++++++++++++++++++++++++++++++                   | 61% ~04s          
   |++++++++++++++++++++++++++++++++                  | 62% ~04s          
   |++++++++++++++++++++++++++++++++                  | 64% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 66% ~03s          
   |++++++++++++++++++++++++++++++++++                | 67% ~03s          
   |++++++++++++++++++++++++++++++++++                | 68% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~03s          
   |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 72% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
   |+++++++++++++++++++++++++++++++++++++++           | 76% ~02s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 78% ~02s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 10s

   |                                                  | 0 % ~calculating  
   |+                                                 | 1 % ~11s          
   |++                                                | 2 % ~11s          
   |++                                                | 3 % ~11s          
   |+++                                               | 4 % ~10s          
   |+++                                               | 5 % ~10s          
   |++++                                              | 6 % ~11s          
   |++++                                              | 7 % ~11s          
   |+++++                                             | 8 % ~11s          
   |+++++                                             | 9 % ~11s          
   |++++++                                            | 10% ~10s          
   |++++++                                            | 11% ~10s          
   |+++++++                                           | 12% ~10s          
   |+++++++                                           | 13% ~10s          
   |++++++++                                          | 14% ~10s          
   |++++++++                                          | 15% ~10s          
   |+++++++++                                         | 16% ~09s          
   |+++++++++                                         | 17% ~09s          
   |++++++++++                                        | 18% ~09s          
   |++++++++++                                        | 19% ~09s          
   |+++++++++++                                       | 20% ~09s          
   |+++++++++++                                       | 21% ~09s          
   |++++++++++++                                      | 22% ~09s          
   |++++++++++++                                      | 23% ~09s          
   |+++++++++++++                                     | 24% ~09s          
   |+++++++++++++                                     | 26% ~09s          
   |++++++++++++++                                    | 27% ~09s          
   |++++++++++++++                                    | 28% ~09s          
   |+++++++++++++++                                   | 29% ~09s          
   |+++++++++++++++                                   | 30% ~08s          
   |++++++++++++++++                                  | 31% ~08s          
   |++++++++++++++++                                  | 32% ~08s          
   |+++++++++++++++++                                 | 33% ~08s          
   |+++++++++++++++++                                 | 34% ~08s          
   |++++++++++++++++++                                | 35% ~08s          
   |++++++++++++++++++                                | 36% ~08s          
   |+++++++++++++++++++                               | 37% ~07s          
   |+++++++++++++++++++                               | 38% ~07s          
   |++++++++++++++++++++                              | 39% ~07s          
   |++++++++++++++++++++                              | 40% ~07s          
   |+++++++++++++++++++++                             | 41% ~07s          
   |+++++++++++++++++++++                             | 42% ~07s          
   |++++++++++++++++++++++                            | 43% ~07s          
   |++++++++++++++++++++++                            | 44% ~07s          
   |+++++++++++++++++++++++                           | 45% ~07s          
   |+++++++++++++++++++++++                           | 46% ~06s          
   |++++++++++++++++++++++++                          | 47% ~06s          
   |++++++++++++++++++++++++                          | 48% ~06s          
   |+++++++++++++++++++++++++                         | 49% ~06s          
   |+++++++++++++++++++++++++                         | 50% ~06s          
   |++++++++++++++++++++++++++                        | 51% ~06s          
   |+++++++++++++++++++++++++++                       | 52% ~06s          
   |+++++++++++++++++++++++++++                       | 53% ~05s          
   |++++++++++++++++++++++++++++                      | 54% ~05s          
   |++++++++++++++++++++++++++++                      | 55% ~05s          
   |+++++++++++++++++++++++++++++                     | 56% ~05s          
   |+++++++++++++++++++++++++++++                     | 57% ~05s          
   |++++++++++++++++++++++++++++++                    | 58% ~05s          
   |++++++++++++++++++++++++++++++                    | 59% ~05s          
   |+++++++++++++++++++++++++++++++                   | 60% ~05s          
   |+++++++++++++++++++++++++++++++                   | 61% ~05s          
   |++++++++++++++++++++++++++++++++                  | 62% ~04s          
   |++++++++++++++++++++++++++++++++                  | 63% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 64% ~04s          
   |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
   |++++++++++++++++++++++++++++++++++                | 66% ~04s          
   |++++++++++++++++++++++++++++++++++                | 67% ~04s          
   |+++++++++++++++++++++++++++++++++++               | 68% ~04s          
   |+++++++++++++++++++++++++++++++++++               | 69% ~04s          
   |++++++++++++++++++++++++++++++++++++              | 70% ~03s          
   |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 72% ~03s          
   |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 74% ~03s          
   |++++++++++++++++++++++++++++++++++++++            | 76% ~03s          
   |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
   |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 79% ~03s          
   |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
   |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
   |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
   |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
   |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
   |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 12s
subtiss9.markers %>% group_by(cluster) %>% top_n(6, avg_logFC)

Check expression of genes of interset.

Dotplots let you see the intensity of exppression and the fraction of cells expressing for each of your genes of interest.

How big are the clusters?

table(subtiss9@ident)

 0  1  2  3  4  5 
79 78 59 37 19 18 

Checking for batch effects

Color by metadata, like plate barcode, to check for batch effects.

TSNEPlot(object = subtiss9, do.return = TRUE, group.by = "plate.barcode")

Print a table showing the count of cells in each identity category from each plate.

table(as.character(subtiss9@ident), as.character(subtiss9@meta.data$plate.barcode))
   
    D042044 D042193 D042467 D042479 D045139 MAA000639 MAA000652 MAA000844 MAA000848 MAA001842 MAA001844 MAA001883
  0      19      11      11       0       0         8         6         1         1         3         0         1
  1       7       5       7       1       0        14        10         0         0         1         2         1
  2       8      14       9       0       0        13         4         0         0         0         0         0
  3       6       8       6       1       0         2         3         0         0         0         1         0
  4       1       4       2       1       0         4         0         0         0         0         0         0
  5       3       4       1       0       1         2         1         2         0         0         0         0
   
    MAA001884 MAA001887 MAA001888
  0         0         0        18
  1         0         1        29
  2         0         0        11
  3         2         0         8
  4         0         0         7
  5         0         0         4

Assigning subcell_ontology_classs

For the subsets, we produce subcell_ontology_classs. These will be written back as metadata in the original object, so we can see all subcell_ontology_classs together.

If some of the clusters you find in the subset deserve additional cell_ontology_class, you can add that right here. Use NA for clusters for which no subcell_ontology_class is needed.

subcluster.ids <- c(0, 1, 2, 3, 4, 5)
subcell_ontology_class <-
  c("natural killer cell",
  "pro-T cell",
  "pro-T cell",
  "immature B cell",
  "immature natural killer cell",
  "immature NK T cell")
  cell_ontology_id = c("CL:0000623",
  "CL:0000827",
  "CL:0000827",
  "CL:0000816",
  "CL:0000823",
  "CL:0000914")
subtiss9@meta.data[,'cell_ontology_class'] <- plyr::mapvalues(x = subtiss9@ident, from = subcluster.ids, to = subcell_ontology_class)
subtiss9@meta.data[,'cell_ontology_id'] <- plyr::mapvalues(x = subtiss9@ident, from = subcluster.ids, to = cell_ontology_id)
tiss@meta.data[subtiss9@cell.names,'cell_ontology_class'] <- as.character(subtiss9@meta.data$cell_ontology_class)
invalid factor level, NA generated
tiss@meta.data[subtiss9@cell.names,'cell_ontology_id'] <- as.character(subtiss9@meta.data$cell_ontology_id)
invalid factor level, NA generated
TSNEPlot(object = subtiss9, do.label = TRUE, pt.size = 0.5, group.by='cell_ontology_class')

When you save the subtissue, please give it a name.

subtiss9.name = 'Nk_T_cells'
save(subtiss9, file=paste0(save_dir,"/",subtiss9.name, "_seurat_subtiss9.Robj"))

Export the final metadata

So that Biohub can easily combine all your cell_ontology_classs, please export them as a simple csv.

write.csv(tiss@meta.data[,c('plate.barcode','cell_ontology_class','subcell_ontology_class')],file =paste0(save_dir,"/", tissue_of_interest,"_cell_ontology_class.csv"))
LS0tCnRpdGxlOiAiTWFycm93IEZBQ1MgTm90ZWJvb2siCm91dHB1dDoKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCkVudGVyIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIG1hY2EgZm9sZGVyIG9uIHlvdXIgZHJpdmUgYW5kIHRoZSBuYW1lIG9mIHRoZSB0aXNzdWUgeW91IHdhbnQgdG8gYW5hbHl6ZS4KCmBgYHtyfQp0aXNzdWVfb2ZfaW50ZXJlc3QgPSAiTWFycm93IgpgYGAKCkxvYWQgdGhlIHJlcXVpc2l0ZSBwYWNrYWdlcyBhbmQgc29tZSBhZGRpdGlvbmFsIGhlbHBlciBmdW5jdGlvbnMuCgpgYGB7cn0KbGlicmFyeShoZXJlKQpsaWJyYXJ5KHVzZWZ1bCkKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoTWF0cml4KQpsaWJyYXJ5KG9udG9sb2d5SW5kZXgpCmNlbGxfb250b2xvZ3kgPSBnZXRfb250b2xvZ3koJ2h0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9vYm9waGVub3R5cGUvY2VsbC1vbnRvbG9neS9tYXN0ZXIvY2wtYmFzaWMub2JvJywgZXh0cmFjdF90YWdzPSdldmVyeXRoaW5nJykKCnZhbGlkYXRlX2NlbGxfb250b2xvZ3kgPSBmdW5jdGlvbihjZWxsX29udG9sb2d5X2NsYXNzKXsKICBpbl9jZWxsX29udG9sb2d5ID0gc2FwcGx5KGNlbGxfb250b2xvZ3lfY2xhc3MsIGZ1bmN0aW9uKHgpIGlzLmVsZW1lbnQoeCwgY2VsbF9vbnRvbG9neSRuYW1lKSB8fCBpcy5uYSh4KSkKICBpZiAoIWFsbChpbl9jZWxsX29udG9sb2d5KSkgewogICAgbWVzc2FnZSA9IHBhc3RlMCgnIicsIGNlbGxfb250b2xvZ3lfY2xhc3NbIWluX2NlbGxfb250b2xvZ3ldLCAnIiBpcyBub3QgaW4gdGhlIGNlbGwgb250b2xvZ3kKJykKICAgIHN0b3AobWVzc2FnZSkKICB9Cn0KY29udmVydF90b19jZWxsX29udG9sb2d5X2lkID0gZnVuY3Rpb24oY2VsbF9vbnRvbG9neV9jbGFzcyl7CiAgcmV0dXJuKHNhcHBseShjZWxsX29udG9sb2d5X2NsYXNzLCBmdW5jdGlvbih4KSBhcy52ZWN0b3IoY2VsbF9vbnRvbG9neSRpZFtjZWxsX29udG9sb2d5JG5hbWUgPT0geF0pWzFdKSkKfQoKc2F2ZV9kaXIgPSBoZXJlKCcwMF9kYXRhX2luZ2VzdCcsICd0aXNzdWVfcm9iaicpCmBgYAoKCgpgYGB7cn0KIyByZWFkIHRoZSBtZXRhZGF0YSB0byBnZXQgdGhlIHBsYXRlcyB3ZSB3YW50CnBsYXRlX21ldGFkYXRhX2ZpbGVuYW1lID0gaGVyZSgnMDBfZGF0YV9pbmdlc3QnLCAnMDBfZmFjc19yYXdfZGF0YScsICdtZXRhZGF0YV9GQUNTLmNzdicpCgpwbGF0ZV9tZXRhZGF0YSA8LSByZWFkLmNzdihwbGF0ZV9tZXRhZGF0YV9maWxlbmFtZSwgc2VwPSIsIiwgaGVhZGVyID0gVFJVRSkKY29sbmFtZXMocGxhdGVfbWV0YWRhdGEpWzFdIDwtICJwbGF0ZS5iYXJjb2RlIgpwbGF0ZV9tZXRhZGF0YQpgYGAKClN1YnNldCB0aGUgbWV0YWRhdGEgb24gdGhlIHRpc3N1ZS4KCmBgYHtyfQp0aXNzdWVfcGxhdGVzID0gZmlsdGVyKHBsYXRlX21ldGFkYXRhLCB0aXNzdWUgPT0gdGlzc3VlX29mX2ludGVyZXN0KVssYygncGxhdGUuYmFyY29kZScsJ3Rpc3N1ZScsJ3N1YnRpc3N1ZScsJ21vdXNlLnNleCcpXQp0aXNzdWVfcGxhdGVzCmBgYAoKTG9hZCB0aGUgcmVhZCBjb3VudCBkYXRhLgpgYGB7cn0KI0xvYWQgdGhlIGdlbmUgbmFtZXMgYW5kIHNldCB0aGUgbWV0YWRhdGEgY29sdW1ucyBieSBvcGVuaW5nIHRoZSBmaXJzdCBmaWxlCmZpbGVuYW1lID0gaGVyZSgnMDBfZGF0YV9pbmdlc3QnLCAnMDBfZmFjc19yYXdfZGF0YScsICdGQUNTJywgcGFzdGUwKHRpc3N1ZV9vZl9pbnRlcmVzdCwgJy1jb3VudHMuY3N2JykpCgpyYXcuZGF0YSA9IHJlYWQuY3N2KGZpbGVuYW1lLCBzZXA9IiwiLCByb3cubmFtZXM9MSkKIyByYXcuZGF0YSA9IGRhdGEuZnJhbWUocm93Lm5hbWVzID0gcm93bmFtZXMocmF3LmRhdGEpKQpjb3JuZXIocmF3LmRhdGEpCmBgYApNYWtlIGEgdmVjdG9yIG9mIHBsYXRlIGJhcmNvZGVzIGZvciBlYWNoIGNlbGwKCmBgYHtyfQpwbGF0ZS5iYXJjb2RlcyA9IGxhcHBseShjb2xuYW1lcyhyYXcuZGF0YSksIGZ1bmN0aW9uKHgpIHN0cnNwbGl0KHN0cnNwbGl0KHgsICJfIilbWzFdXVsxXSwgJy4nLCBmaXhlZD1UUlVFKVtbMV1dWzJdKQpoZWFkKHBsYXRlLmJhcmNvZGVzKQpgYGAKClVzZSBvbmx5IHRoZSBtZXRhZGF0YSByb3dzIGNvcnJlc3BvbmRpbmcgdG8gQmxhZGRlciBwbGF0ZXMuIE1ha2UgYSBwbGF0ZSBiYXJjb2RlIGRhdGFmcmFtZSB0byAiZXhwYW5kIiB0aGUgcGVyLXBsYXRlIG1ldGFkYXRhIHRvIGJlIHBlci1jZWxsLgpgYGB7cn0KYmFyY29kZS5kZiA9IHQuZGF0YS5mcmFtZShhcy5kYXRhLmZyYW1lKHBsYXRlLmJhcmNvZGVzKSkKCnJvd25hbWVzKGJhcmNvZGUuZGYpID0gY29sbmFtZXMocmF3LmRhdGEpCmNvbG5hbWVzKGJhcmNvZGUuZGYpID0gYygncGxhdGUuYmFyY29kZScpCmhlYWQoYmFyY29kZS5kZikKCnJuYW1lcyA9IHJvdy5uYW1lcyhiYXJjb2RlLmRmKQptZXRhLmRhdGEgPC0gbWVyZ2UoYmFyY29kZS5kZiwgcGxhdGVfbWV0YWRhdGEsIGJ5PSdwbGF0ZS5iYXJjb2RlJywgc29ydCA9IFQpCnJvdy5uYW1lcyhtZXRhLmRhdGEpIDwtIHJuYW1lcwpjb3JuZXIobWV0YS5kYXRhKQoKIyBTb3J0IGNlbGxzIGJ5IHBsYXRlIGJhcmNvZGUgYmVjYXVzZSB0aGF0J3MgaG93IHRoZSBkYXRhIHdhcyBvcmlnaW5hbGx5Cm1ldGEuZGF0YSA9IG1ldGEuZGF0YVtvcmRlcihtZXRhLmRhdGEkcGxhdGUuYmFyY29kZSksIF0KY29ybmVyKG1ldGEuZGF0YSkKcmF3LmRhdGEgPSByYXcuZGF0YVssIHJvd25hbWVzKG1ldGEuZGF0YSldCmNvcm5lcihyYXcuZGF0YSkKYGBgClByb2Nlc3MgdGhlIHJhdyBkYXRhIGFuZCBsb2FkIGl0IGludG8gdGhlIFNldXJhdCBvYmplY3QuCgpgYGB7cn0KIyBGaW5kIEVSQ0MncywgY29tcHV0ZSB0aGUgcGVyY2VudCBFUkNDLCBhbmQgZHJvcCB0aGVtIGZyb20gdGhlIHJhdyBkYXRhLgplcmNjcyA8LSBncmVwKHBhdHRlcm4gPSAiXkVSQ0MtIiwgeCA9IHJvd25hbWVzKHggPSByYXcuZGF0YSksIHZhbHVlID0gVFJVRSkKcGVyY2VudC5lcmNjIDwtIE1hdHJpeDo6Y29sU3VtcyhyYXcuZGF0YVtlcmNjcywgXSkvTWF0cml4Ojpjb2xTdW1zKHJhdy5kYXRhKQplcmNjLmluZGV4IDwtIGdyZXAocGF0dGVybiA9ICJeRVJDQy0iLCB4ID0gcm93bmFtZXMoeCA9IHJhdy5kYXRhKSwgdmFsdWUgPSBGQUxTRSkKcmF3LmRhdGEgPC0gcmF3LmRhdGFbLWVyY2MuaW5kZXgsXQoKIyBDcmVhdGUgdGhlIFNldXJhdCBvYmplY3Qgd2l0aCBhbGwgdGhlIGRhdGEKdGlzcyA8LSBDcmVhdGVTZXVyYXRPYmplY3QocmF3LmRhdGEgPSByYXcuZGF0YSwgcHJvamVjdCA9IHRpc3N1ZV9vZl9pbnRlcmVzdCwgCiAgICAgICAgICAgICAgICAgICAgbWluLmNlbGxzID0gNSwgbWluLmdlbmVzID0gNSkKCnRpc3MgPC0gQWRkTWV0YURhdGEob2JqZWN0ID0gdGlzcywgbWV0YS5kYXRhKQp0aXNzIDwtIEFkZE1ldGFEYXRhKG9iamVjdCA9IHRpc3MsIHBlcmNlbnQuZXJjYywgY29sLm5hbWUgPSAicGVyY2VudC5lcmNjIikKIyBDaGFuZ2UgZGVmYXVsdCBuYW1lIGZvciBzdW1zIG9mIGNvdW50cyBmcm9tIG5VTUkgdG8gblJlYWRzCmNvbG5hbWVzKHRpc3NAbWV0YS5kYXRhKVtjb2xuYW1lcyh0aXNzQG1ldGEuZGF0YSkgPT0gJ25VTUknXSA8LSAnblJlYWRzJwoKIyBDcmVhdGUgbWV0YWRhdGEgY29sdW1ucyBmb3IgY2VsbF9vbnRvbG9neV9jbGFzc3MgYW5kIHN1YmNlbGxfb250b2xvZ3lfY2xhc3NzCnRpc3NAbWV0YS5kYXRhWywnZnJlZV9hbm5vdGF0aW9uJ10gPC0gTkEKdGlzc0BtZXRhLmRhdGFbLCdjZWxsX29udG9sb2d5X2NsYXNzJ10gPC0gTkEKdGlzc0BtZXRhLmRhdGFbLCdzdWJjZWxsX29udG9sb2d5X2NsYXNzJ10gPC0gTkEKYGBgCgoKQ2FsY3VsYXRlIHBlcmNlbnQgcmlib3NvbWFsIGdlbmVzLgoKYGBge3J9CnJpYm8uZ2VuZXMgPC0gZ3JlcChwYXR0ZXJuID0gIl5ScFtzbF1bWzpkaWdpdDpdXSIsIHggPSByb3duYW1lcyh4ID0gdGlzc0BkYXRhKSwgdmFsdWUgPSBUUlVFKQpwZXJjZW50LnJpYm8gPC0gTWF0cml4Ojpjb2xTdW1zKHRpc3NAcmF3LmRhdGFbcmliby5nZW5lcywgXSkvTWF0cml4Ojpjb2xTdW1zKHRpc3NAcmF3LmRhdGEpCnRpc3MgPC0gQWRkTWV0YURhdGEob2JqZWN0ID0gdGlzcywgbWV0YWRhdGEgPSBwZXJjZW50LnJpYm8sIGNvbC5uYW1lID0gInBlcmNlbnQucmlibyIpCmBgYAoKQSBzYW5pdHkgY2hlY2s6IGdlbmVzIHBlciBjZWxsIHZzIHJlYWRzIHBlciBjZWxsLgoKYGBge3J9CkdlbmVQbG90KG9iamVjdCA9IHRpc3MsIGdlbmUxID0gIm5SZWFkcyIsIGdlbmUyID0gIm5HZW5lIiwgdXNlLnJhdz1UKQpgYGAKCkZpbHRlciBvdXQgY2VsbHMgd2l0aCBmZXcgcmVhZHMgYW5kIGZldyBnZW5lcy4KCmBgYHtyfQp0aXNzIDwtIEZpbHRlckNlbGxzKG9iamVjdCA9IHRpc3MsIHN1YnNldC5uYW1lcyA9IGMoIm5HZW5lIiwgIm5SZWFkcyIpLCAKICAgIGxvdy50aHJlc2hvbGRzID0gYyg1MDAsIDUwMDAwKSwgaGlnaC50aHJlc2hvbGRzID0gYygyNTAwMCwgMjAwMDAwMCkpCmBgYAoKCk5vcm1hbGl6ZSB0aGUgZGF0YSwgdGhlbiByZWdyZXNzIG91dCBjb3JyZWxhdGlvbiB3aXRoIHRvdGFsIHJlYWRzCmBgYHtyfQp0aXNzIDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gdGlzcywgc2NhbGUuZmFjdG9yID0gMWU2KQp0aXNzIDwtIFNjYWxlRGF0YShvYmplY3QgPSB0aXNzKQp0aXNzIDwtIEZpbmRWYXJpYWJsZUdlbmVzKG9iamVjdCA9IHRpc3MsIGRvLnBsb3QgPSBUUlVFLCB4LmhpZ2guY3V0b2ZmID0gSW5mLCB5LmN1dG9mZiA9IDAuNSkKYGBgCgoKUnVuIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMuCmBgYHtyfQp0aXNzIDwtIFJ1blBDQShvYmplY3QgPSB0aXNzLCBkby5wcmludCA9IEZBTFNFKQp0aXNzIDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gdGlzcywgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KUENIZWF0bWFwKG9iamVjdCA9IHRpc3MsIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gNTAwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gOCkKYGBgCgpMYXRlciBvbiAoaW4gRmluZENsdXN0ZXJzIGFuZCBUU05FKSB5b3Ugd2lsbCBwaWNrIGEgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBrZWVwaW5nIHRoZSBtYWpvciBkaXJlY3Rpb25zIG9mIHZhcmlhdGlvbiBpbiB0aGUgZGF0YSBhbmQsIGlkZWFsbHksIHN1cHJlc3Npbmcgbm9pc2UuIFRoZXJlIGlzIG5vIGNvcnJlY3QgYW5zd2VyIHRvIHRoZSBudW1iZXIgdG8gdXNlLCBidXQgYSBkZWNlbnQgcnVsZSBvZiB0aHVtYiBpcyB0byBnbyB1bnRpbCB0aGUgcGxvdCBwbGF0ZWF1cy4KCmBgYHtyfQpQQ0VsYm93UGxvdChvYmplY3QgPSB0aXNzKQpgYGAKCkNob29zZSB0aGUgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzIHRvIHVzZS4KYGBge3J9CiMgU2V0IG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cy4gCm4ucGNzID0gMTIKYGBgCgoKVGhlIGNsdXN0ZXJpbmcgaXMgcGVyZm9ybWVkIGJhc2VkIG9uIGEgbmVhcmVzdCBuZWlnaGJvcnMgZ3JhcGguIENlbGxzIHRoYXQgaGF2ZSBzaW1pbGFyIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBMb3V2YWluIGFsZ29yaXRobSBsb29rcyBmb3IgZ3JvdXBzIG9mIGNlbGxzIHdpdGggaGlnaCBtb2R1bGFyaXR5LS1tb3JlIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgZ3JvdXAgdGhhbiBiZXR3ZWVuIGdyb3Vwcy4gVGhlIHJlc29sdXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNjYWxlLi4uaGlnaGVyIHJlc29sdXRpb24gd2lsbCBnaXZlIG1vcmUgY2x1c3RlcnMsIGxvd2VyIHJlc29sdXRpb24gd2lsbCBnaXZlIGZld2VyLgoKRm9yIHRoZSB0b3AtbGV2ZWwgY2x1c3RlcmluZywgYWltIHRvIHVuZGVyLWNsdXN0ZXIgaW5zdGVhZCBvZiBvdmVyLWNsdXN0ZXIuIEl0IHdpbGwgYmUgZWFzeSB0byBzdWJzZXQgZ3JvdXBzIGFuZCBmdXJ0aGVyIGFuYWx5emUgdGhlbSBiZWxvdy4KCmBgYHtyfQojIFNldCByZXNvbHV0aW9uIApyZXMudXNlZCA8LSAwLjUKCnRpc3MgPC0gRmluZENsdXN0ZXJzKG9iamVjdCA9IHRpc3MsIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpuLnBjcywgCiAgICByZXNvbHV0aW9uID0gcmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4KdGlzcyA8LSBSdW5UU05FKG9iamVjdCA9IHRpc3MsIGRpbXMudXNlID0gMTpuLnBjcywgc2VlZC51c2UgPSAxMCwgcGVycGxleGl0eT04NCkKYGBgCgpgYGB7cn0KIyBub3RlIHRoYXQgeW91IGNhbiBzZXQgZG8ubGFiZWw9VCB0byBoZWxwIGxhYmVsIGluZGl2aWR1YWwgY2x1c3RlcnMKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUKQpgYGAKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0xNDcsIGZpZy53aWR0aD0xNX0KZ2VuZXNfdG9fY2hlY2sgPSBjKCdJdGdhbScsICdJbDdyJywgJ0tpdCcsICdBdHhuMScsICdGY2dyMycsICdGbHQzJywgJ0NkMzQnLCAnU2xhbWYxJywgJ0dwcjU2JywgJ1N0bW4xJywgJ1RtZW0xNzZiJywgICdJdGdhbCcsICdJdGdheCcsICdFbXIxJywgJ0NkNjgnLCAnQ2Q2OScsICdGY2dyNCcsICdNcGVnMScsICdJdGdiMicsICdBaG5haycsICdQbGQ0JywgJ0NkM2UnLCAnQ2Q0JywgJ0NkOGEnLCAnTHk2ZCcsICdDZDI3JywgJ0NyMicsICdGY2VyMmEnLCAnQ2QyJywgJ0NkNycsICdNbWUnLCAnVGh5MScsICdLbHJiMWEnLCAnUzEwMGExMScsICdMdGYnLCAnTmdwJywgJ0ZjZXIxZycsICdQZ2x5cnAxJywgJ0xjbjInLCAnQ2FtcCcsICdIcCcsICdMeTZnNmMnLCAnTHk2ZzZlJywgJ1B0cHJjJywgJ0NkMTknLCAnTXM0YTEnLCAnQ2Q3NCcsICdDaGNoZDEwJywgJ0NucCcsICdDZDc5YScsICdDZDc5YicsICdWcHJlYjMnLCAnQ2QzOCcsICdDZDIyJywgJ0NkMjRhJywgJ0NkNDAnLCAnQ2Q0OCcsICdDZDUzJywgJ0NkODEnLCAnQ2Q4NCcsICdDeGNyNCcsICdDeGNyNScsICdDY3I2JywgJ0NkMjAwJywgJ0x5OScsICdBYmNiMWInLCAnVGxyOScsICdTbGFtZjYnLCAnSDItRWEtcHMnLCAnUGF4NScsICdGb3hvMScsICdLbGY0JywgJ0tsZjknLCAnTWl0ZicsICdQb3UyYWYxJywgJ1pidGIxNicsICdTcGliJywgJ1NwbicsICdEbnR0JywgJ1JhZzEnLCAnUmFnMicsICdJbDJyYScsICdQZHprMWlwMScsICdMeTZhJywgJ0l0Z2EyYicsICdGb3MnLCAnSnVuYicsICdNeWwxMCcsICdKdW4nLCAnTW4xJywgJ1MxMDBhOScsICdDY2w5JywgJ1RjZjMnLCAnRWJmMScsICdJa3pmMScsICdTZnBpMScsICdDZDFkMScsICdFZ3IyJywgJ01raTY3JywgJ0NkMTQnLCAnTXBsJywgJ0lsM3JhJykKI2dlbmVzX3RvX2NoZWNrID0gYygnQWxiJywgJ0N5cDJmMicsICdDeXAyZTEnLCAnSGFtcCcpCgpGZWF0dXJlUGxvdCh0aXNzLCBnZW5lc190b19jaGVjaywgcHQuc2l6ZSA9IDEsIG5Db2wgPSAzKQpgYGAKCkRvdHBsb3RzIGxldCB5b3Ugc2VlIHRoZSBpbnRlbnNpdHkgb2YgZXhwcHJlc3Npb24gYW5kIHRoZSBmcmFjdGlvbiBvZiBjZWxscyBleHByZXNzaW5nIGZvciBlYWNoIG9mIHlvdXIgZ2VuZXMgb2YgaW50ZXJlc3QuCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9NjZ9CiMgVG8gY2hhbmdlIHRoZSB5LWF4aXMgdG8gc2hvdyByYXcgY291bnRzLCBhZGQgdXNlLnJhdyA9IFQuCkRvdFBsb3QodGlzcywgZ2VuZXNfdG9fY2hlY2ssIHBsb3QubGVnZW5kID0gVCkKYGBgCgpIb3cgYmlnIGFyZSB0aGUgY2x1c3RlcnM/CmBgYHtyfQp0YWJsZSh0aXNzQGlkZW50KQpgYGAKCldoaWNoIG1hcmtlcnMgaWRlbnRpZnkgYSBzcGVjaWZpYyBjbHVzdGVyPwoKYGBge3J9CmNsdXN0Lm1hcmtlcnMgPC0gRmluZE1hcmtlcnMob2JqZWN0ID0gdGlzcywgaWRlbnQuMSA9IDAsIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKCmBgYHtyfQpwcmludCh4ID0gaGVhZCh4PSBjbHVzdC5tYXJrZXJzLCBuID0gMTApKQpgYGAKCllvdSBjYW4gYWxzbyBjb21wdXRlIGFsbCBtYXJrZXJzIGZvciBhbGwgY2x1c3RlcnMgYXQgb25jZS4gVGhpcyBtYXkgdGFrZSBzb21lIHRpbWUuCmBgYHtyfQp0aXNzLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gdGlzcywgb25seS5wb3MgPSBUUlVFLCBtaW4ucGN0ID0gMC4yNSwgdGhyZXNoLnVzZSA9IDAuMjUpCmBgYApgYGB7cn0KaGVhZCh0aXNzLm1hcmtlcnMpCmBgYAoKRGlzcGxheSB0aGUgdG9wIG1hcmtlcnMgeW91IGNvbXB1dGVkIGFib3ZlLgpgYGB7cn0KdGlzcy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24oNSwgYXZnX2xvZ0ZDKQpgYGAKCiMjIEFzc2lnbmluZyBjZWxsIHR5cGUgaWRlbnRpdHkgdG8gY2x1c3RlcnMKCkF0IGEgY29hcnNlIGxldmVsLCB3ZSBjYW4gdXNlIGNhbm9uaWNhbCBtYXJrZXJzIHRvIG1hdGNoIHRoZSB1bmJpYXNlZCBjbHVzdGVyaW5nIHRvIGtub3duIGNlbGwgdHlwZXM6CgowOiBhbHBoYQoxOiBiZXRhCjI6IGJldGEKMzogZXhvY3JpbmUKNDogZHVjdAo1OiBkZWx0YQo2OiBnYW1tYQo3OiBlbmRvdGhlbGlhbAo4OiBpbW11bmUKOTogc3RlbGxhdGUKCmBgYHtyfQojIHN0YXNoIGN1cnJlbnQgY2x1c3RlciBJRHMKdGlzcyA8LSBTdGFzaElkZW50KG9iamVjdCA9IHRpc3MsIHNhdmUubmFtZSA9ICJjbHVzdGVyLmlkcyIpCgojIGVudW1lcmF0ZSBjdXJyZW50IGNsdXN0ZXIgSURzIGFuZCB0aGUgbGFiZWxzIGZvciB0aGVtCmNsdXN0ZXIuaWRzIDwtIGMoMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMikKZnJlZV9hbm5vdGF0aW9uIDwtIGMoKQpjZWxsX29udG9sb2d5X2NsYXNzIDwtYygibmFpdmUgQiIsICJoZW1hdG9wb2lldGljIHByZWN1cnNvciIsICJwcmUtQiIsICJoZW1hdG9wb2lldGljIG9saWdvcG90ZW50IHByb2dlbml0b3IiLCAiZ3JhbnVsb2N5dGUiLCAibmV1dHJvcGhpbCIsICJpbW1hdHVyZSBCIiwgIm1vbm9jeXRlIiwgImxhdGUgcHJvLUIiLCAicHJvIFRfTktUIiwgIm5ldXRyb3BoaWwgcHJvZ2VuaXRvciIsICJoZW1hdG9wb2lldGljIHByZWN1cnNvciIsICJDRDQtcG9zaXRpdmUgaGVscGVyIFQiKQpjZWxsX29udG9sb2d5X2lkIDwtIGMoIkNMOjAwMDA3ODgiLCAiQ0w6MDAwODAwMSIsICJDTDowMDAwODE3IiwgIkNMOjAwMDA4MzciLCAiQ0w6MDAwMDA5NCIsICJDTDowMDAwNzc1IiwgIkNMOjAwMDA4MTYiLCAiQ0w6MDAwMDU3NiIsICJDTDowMDAyMDQ4IiwgTkEsICJDTDowMDAwODM0IiwgIkNMOjAwMDgwMDEiLCAiQ0w6MDAwMDQ5MiIpCiAgCgp0aXNzQG1ldGEuZGF0YVssJ2ZyZWVfYW5ub3RhdGlvbiddIDwtIE5BCnRpc3NAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9jbGFzcyddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGNlbGxfb250b2xvZ3lfY2xhc3MpCnRpc3NAbWV0YS5kYXRhWywnY2VsbF9vbnRvbG9neV9pZCddIDwtIHBseXI6Om1hcHZhbHVlcyh4ID0gdGlzc0BpZGVudCwgZnJvbSA9IGNsdXN0ZXIuaWRzLCB0byA9IGNlbGxfb250b2xvZ3lfaWQpCgp0aXNzQG1ldGEuZGF0YVt0aXNzQGNlbGwubmFtZXMsJ2NlbGxfb250b2xvZ3lfY2xhc3MnXSA8LSBhcy5jaGFyYWN0ZXIodGlzc0BtZXRhLmRhdGEkY2VsbF9vbnRvbG9neV9jbGFzcykKdGlzc0BtZXRhLmRhdGFbdGlzc0BjZWxsLm5hbWVzLCdjZWxsX29udG9sb2d5X2lkJ10gPC0gYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfaWQpCgoKVFNORVBsb3Qob2JqZWN0ID0gdGlzcywgZG8ubGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMC41LCBncm91cC5ieT0nY2VsbF9vbnRvbG9neV9jbGFzcycpCmBgYAoKCiMjIENoZWNraW5nIGZvciBiYXRjaCBlZmZlY3RzCgoKQ29sb3IgYnkgbWV0YWRhdGEsIGxpa2UgcGxhdGUgYmFyY29kZSwgdG8gY2hlY2sgZm9yIGJhdGNoIGVmZmVjdHMuCmBgYHtyfQpUU05FUGxvdChvYmplY3QgPSB0aXNzLCBkby5yZXR1cm4gPSBUUlVFLCBncm91cC5ieSA9ICJwbGF0ZS5iYXJjb2RlIikKYGBgCgpQcmludCBhIHRhYmxlIHNob3dpbmcgdGhlIGNvdW50IG9mIGNlbGxzIGluIGVhY2ggaWRlbnRpdHkgY2F0ZWdvcnkgZnJvbSBlYWNoIHBsYXRlLgoKYGBge3J9CnRhYmxlKGFzLmNoYXJhY3Rlcih0aXNzQGlkZW50KSwgYXMuY2hhcmFjdGVyKHRpc3NAbWV0YS5kYXRhJHBsYXRlLmJhcmNvZGUpKQpgYGAKCgojIFN1YnNldCBhbmQgaXRlcmF0ZQoKV2UgY2FuIHJlcGVhdCB0aGUgYWJvdmUgYW5hbHlzaXMgb24gYSBzdWJzZXQgb2YgY2VsbHMsIGRlZmluZWQgdXNpbmcgY2x1c3RlciBJRHMgb3Igc29tZSBvdGhlciBtZXRhZGF0YS4gVGhpcyBpcyBhIGdvb2Qgd2F5IHRvIGRyaWxsIGRvd24gYW5kIGZpbmQgc3Vic3RydWN0dXJlLgoKCiMjIFN1YnNldCA9PSBUIGFuZCBOSyBjZWxscyAoQ2x1c3RlciA5KQoKYGBge3J9CiMgU3Vic2V0IGRhdGEgYmFzZWQgb24gY2x1c3RlciBpZApzdWJ0aXNzOSA8LSBTdWJzZXREYXRhKG9iamVjdCA9IHRpc3MsIGlkZW50LnVzZSA9IGMoOSksIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRiwgY2VsbHMudXNlID0gKQoKIyBUbyBzdWJzZXQgZGF0YSBiYXNlZCBvbiBjZWxsX29udG9sb2d5X2NsYXNzIG9yIG90aGVyIG1ldGFkYXRhLCB5b3UgY2FuIGV4cGxpY2l0bHkgcGFzcyBjZWxsIG5hbWVzCgojIGFubm8gPSAnZXhvY3JpbmUgY2VsbHMnCiMgY2VsbHMudG8udXNlID0gdGlzc0BjZWxsLm5hbWVzW3doaWNoKHRpc3NAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfY2xhc3MgPT0gYW5ubyldCiMgc3VidGlzczkgPC0gU3Vic2V0RGF0YShvYmplY3QgPSB0aXNzLCBjZWxscy51c2UgPSBjZWxscy50by51c2UsIGRvLmNlbnRlciA9IEYsIGRvLnNjYWxlID0gRikKCmBgYAoKYGBge3J9CnN1YnRpc3M5IDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gc3VidGlzczkpCnN1YnRpc3M5IDwtIFNjYWxlRGF0YShvYmplY3QgPSBzdWJ0aXNzOSwgdmFycy50by5yZWdyZXNzID0gYygiblJlYWRzIiwgInBlcmNlbnQucmlibyIsIlJuNDVzIikpCmBgYAoKYGBge3J9CnN1YnRpc3M5IDwtIEZpbmRWYXJpYWJsZUdlbmVzKG9iamVjdCA9IHN1YnRpc3M5LCBkby5wbG90ID0gVFJVRSwgeC5oaWdoLmN1dG9mZiA9IEluZiwgeS5jdXRvZmYgPSAwLjgpCnN1YnRpc3M5IDwtIFJ1blBDQShvYmplY3QgPSBzdWJ0aXNzOSwgcGNzLmNvbXB1dGUgPSAyMCkKc3VidGlzczkgPC0gUHJvamVjdFBDQShvYmplY3QgPSBzdWJ0aXNzOSwgZG8ucHJpbnQgPSBGQUxTRSkKYGBgCgoKUnVuIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMuCmBgYHtyfQpzdWJ0aXNzOSA8LSBSdW5QQ0Eob2JqZWN0ID0gc3VidGlzczksIGRvLnByaW50ID0gRkFMU0UpCnN1YnRpc3M5IDwtIFByb2plY3RQQ0Eob2JqZWN0ID0gc3VidGlzczksIGRvLnByaW50ID0gRkFMU0UpCmBgYAoKYGBge3J9CiMgSWYgdGhpcyBmYWlscyBmb3IgeW91ciBzdWJzZXQsIGl0IG1heSBiZSB0aGF0IGNlbGxzLnVzZSBpcyBtb3JlIGNlbGxzIHRoYW4geW91IGhhdmUgbGVmdCEgVHJ5IHJlZHVjaW5nIGl0LgpQQ0hlYXRtYXAob2JqZWN0ID0gc3VidGlzczksIHBjLnVzZSA9IDE6MywgY2VsbHMudXNlID0gMjUwLCBkby5iYWxhbmNlZCA9IFRSVUUsIGxhYmVsLmNvbHVtbnMgPSBGQUxTRSwgbnVtLmdlbmVzID0gMTIpCmBgYAoKTGF0ZXIgb24gKGluIEZpbmRDbHVzdGVycyBhbmQgVFNORSkgeW91IHdpbGwgcGljayBhIG51bWJlciBvZiBwcmluY2lwYWwgY29tcG9uZW50cyB0byB1c2UuIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2Yga2VlcGluZyB0aGUgbWFqb3IgZGlyZWN0aW9ucyBvZiB2YXJpYXRpb24gaW4gdGhlIGRhdGEgYW5kLCBpZGVhbGx5LCBzdXByZXNzaW5nIG5vaXNlLiBUaGVyZSBpcyBubyBjb3JyZWN0IGFuc3dlciB0byB0aGUgbnVtYmVyIHRvIHVzZSwgYnV0IGEgZGVjZW50IHJ1bGUgb2YgdGh1bWIgaXMgdG8gZ28gdW50aWwgdGhlIHBsb3QgcGxhdGVhdXMuCgpgYGB7cn0KUENFbGJvd1Bsb3Qob2JqZWN0ID0gc3VidGlzczkpCmBgYAoKQ2hvb3NlIHRoZSBudW1iZXIgb2YgcHJpbmNpcGFsIGNvbXBvbmVudHMgdG8gdXNlLgpgYGB7cn0KIyBTZXQgbnVtYmVyIG9mIHByaW5jaXBhbCBjb21wb25lbnRzLiAKc3ViOS5uLnBjcyA9IDUKYGBgCgoKVGhlIGNsdXN0ZXJpbmcgaXMgcGVyZm9ybWVkIGJhc2VkIG9uIGEgbmVhcmVzdCBuZWlnaGJvcnMgZ3JhcGguIENlbGxzIHRoYXQgaGF2ZSBzaW1pbGFyIGV4cHJlc3Npb24gd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBMb3V2YWluIGFsZ29yaXRobSBsb29rcyBmb3IgZ3JvdXBzIG9mIGNlbGxzIHdpdGggaGlnaCBtb2R1bGFyaXR5LS1tb3JlIGNvbm5lY3Rpb25zIHdpdGhpbiB0aGUgZ3JvdXAgdGhhbiBiZXR3ZWVuIGdyb3Vwcy4gVGhlIHJlc29sdXRpb24gcGFyYW1ldGVyIGRldGVybWluZXMgdGhlIHNjYWxlLi4uaGlnaGVyIHJlc29sdXRpb24gd2lsbCBnaXZlIG1vcmUgY2x1c3RlcnMsIGxvd2VyIHJlc29sdXRpb24gd2lsbCBnaXZlIGZld2VyLgoKYGBge3J9CiMgU2V0IHJlc29sdXRpb24gCnN1Yi5yZXMudXNlZCA8LSAxCgpzdWJ0aXNzOSA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0ID0gc3VidGlzczksIHJlZHVjdGlvbi50eXBlID0gInBjYSIsIGRpbXMudXNlID0gMTpzdWI5Lm4ucGNzLCAKICAgIHJlc29sdXRpb24gPSBzdWIucmVzLnVzZWQsIHByaW50Lm91dHB1dCA9IDAsIHNhdmUuU05OID0gVFJVRSkKYGBgCgpUbyB2aXN1YWxpemUgCmBgYHtyfQojIElmIGNlbGxzIGFyZSB0b28gc3ByZWFkIG91dCwgeW91IGNhbiByYWlzZSB0aGUgcGVycGxleGl0eS4gSWYgeW91IGhhdmUgZmV3IGNlbGxzLCB0cnkgYSBsb3dlciBwZXJwbGV4aXR5IChidXQgbmV2ZXIgbGVzcyB0aGFuIDEwKS4Kc3VidGlzczkgPC0gUnVuVFNORShvYmplY3QgPSBzdWJ0aXNzOSwgZGltcy51c2UgPSAxOnN1Yjkubi5wY3MsIHNlZWQudXNlID0gMTAsIHBlcnBsZXhpdHk9MzApCmBgYAoKYGBge3J9CiMgbm90ZSB0aGF0IHlvdSBjYW4gc2V0IGRvLmxhYmVsPVQgdG8gaGVscCBsYWJlbCBpbmRpdmlkdWFsIGNsdXN0ZXJzClRTTkVQbG90KG9iamVjdCA9IHN1YnRpc3M5LCBkby5sYWJlbCA9IFQpCmBgYAoKYGBge3J9CnN1YnRpc3M5Lm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMob2JqZWN0ID0gc3VidGlzczksIG9ubHkucG9zID0gVFJVRSwgbWluLnBjdCA9IDAuMjUsIHRocmVzaC51c2UgPSAwLjI1KQpgYGAKCmBgYHtyfQpzdWJ0aXNzOS5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgdG9wX24oNiwgYXZnX2xvZ0ZDKQpgYGAKCkNoZWNrIGV4cHJlc3Npb24gb2YgZ2VuZXMgb2YgaW50ZXJzZXQuCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTY2LCBmaWcud2lkdGg9MTV9CmdlbmVzX3RvX2NoZWNrID0gYygnQ2Q2JywnSWw3cicsJ0N0bGE0JywnQ2Q4YjEnLCAnQ2Q2OScsICdDeGNyNicsICdDZDQnLCAnQ2Q4YScsICdUeXJvYnAnLCAnTmNyMScsICdDZDNlJywgJ0tscmIxYScsICdLbHJiMWMnLCAnR3ptYScsICdQcmYxJywgJ1NlcnBpbmI5JywgJ0x5ejInLCAnTmdwJywgJ0hwJywgJ0x5NmMyJywgJ0NkNzlhJywgJ0NkNzQnLCAnSDItQWEnLCAnSDItQWIxJywgJ0NkNzliJywgJ0gyLUViMScsICdDY25hMicsICdTdG1uMScsICdUb3AyYScsICdNa2k2NycsICdScm0yJywgJ05rZzcnLCAnQ2QxZDEnLCAnRWdyMicsICdDZDE5JywgJ01zNGExJywgJ0NoY2hkMTAnLCAnQ25wJywgJ1JhZzEnLCAnUmFnMicsICdEbnR0JywgJ1BheDUnLCAnSWwycmEnLCAnQ3hjcjUnLCAnQ2NyNicsICdDcjInLCAnQ2QyMicsICdWcHJlYjMnLCAnTWtpNjcnLCAnU3RtbjEnLCAnSWwycmInKQoKRmVhdHVyZVBsb3Qoc3VidGlzczksIGdlbmVzX3RvX2NoZWNrLCBwdC5zaXplID0gMSwgbkNvbCA9IDMpCmBgYAoKRG90cGxvdHMgbGV0IHlvdSBzZWUgdGhlIGludGVuc2l0eSBvZiBleHBwcmVzc2lvbiBhbmQgdGhlIGZyYWN0aW9uIG9mIGNlbGxzIGV4cHJlc3NpbmcgZm9yIGVhY2ggb2YgeW91ciBnZW5lcyBvZiBpbnRlcmVzdC4KCmBgYHtyLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD0zMH0KIyBUbyBjaGFuZ2UgdGhlIHktYXhpcyB0byBzaG93IHJhdyBjb3VudHMsIGFkZCB1c2UucmF3ID0gVC4KRG90UGxvdChzdWJ0aXNzOSwgZ2VuZXNfdG9fY2hlY2ssIHBsb3QubGVnZW5kID0gVCkKYGBgCgpIb3cgYmlnIGFyZSB0aGUgY2x1c3RlcnM/CmBgYHtyfQp0YWJsZShzdWJ0aXNzOUBpZGVudCkKYGBgCgojIyBDaGVja2luZyBmb3IgYmF0Y2ggZWZmZWN0cwoKQ29sb3IgYnkgbWV0YWRhdGEsIGxpa2UgcGxhdGUgYmFyY29kZSwgdG8gY2hlY2sgZm9yIGJhdGNoIGVmZmVjdHMuCmBgYHtyfQpUU05FUGxvdChvYmplY3QgPSBzdWJ0aXNzOSwgZG8ucmV0dXJuID0gVFJVRSwgZ3JvdXAuYnkgPSAicGxhdGUuYmFyY29kZSIpCmBgYAoKUHJpbnQgYSB0YWJsZSBzaG93aW5nIHRoZSBjb3VudCBvZiBjZWxscyBpbiBlYWNoIGlkZW50aXR5IGNhdGVnb3J5IGZyb20gZWFjaCBwbGF0ZS4KCmBgYHtyfQp0YWJsZShhcy5jaGFyYWN0ZXIoc3VidGlzczlAaWRlbnQpLCBhcy5jaGFyYWN0ZXIoc3VidGlzczlAbWV0YS5kYXRhJHBsYXRlLmJhcmNvZGUpKQpgYGAKCgoKIyMjIEFzc2lnbmluZyBzdWJjZWxsX29udG9sb2d5X2NsYXNzcwoKRm9yIHRoZSBzdWJzZXRzLCB3ZSBwcm9kdWNlIHN1YmNlbGxfb250b2xvZ3lfY2xhc3NzLiBUaGVzZSB3aWxsIGJlIHdyaXR0ZW4gYmFjayBhcyBtZXRhZGF0YSBpbiB0aGUgb3JpZ2luYWwgb2JqZWN0LCBzbyB3ZSBjYW4gc2VlIGFsbCBzdWJjZWxsX29udG9sb2d5X2NsYXNzcyB0b2dldGhlci4KCklmIHNvbWUgb2YgdGhlIGNsdXN0ZXJzIHlvdSBmaW5kIGluIHRoZSBzdWJzZXQgZGVzZXJ2ZSBhZGRpdGlvbmFsIGNlbGxfb250b2xvZ3lfY2xhc3MsIHlvdSBjYW4gYWRkIHRoYXQgcmlnaHQgaGVyZS4gVXNlIE5BIGZvciBjbHVzdGVycyBmb3Igd2hpY2ggbm8gc3ViY2VsbF9vbnRvbG9neV9jbGFzcyBpcyBuZWVkZWQuCgpgYGB7cn0Kc3ViY2x1c3Rlci5pZHMgPC0gYygwLCAxLCAyLCAzLCA0LCA1KQpzdWJjZWxsX29udG9sb2d5X2NsYXNzIDwtCiAgYygibmF0dXJhbCBraWxsZXIgY2VsbCIsCiAgInByby1UIGNlbGwiLAogICJwcm8tVCBjZWxsIiwKICAiaW1tYXR1cmUgQiBjZWxsIiwKICAiaW1tYXR1cmUgbmF0dXJhbCBraWxsZXIgY2VsbCIsCiAgImltbWF0dXJlIE5LIFQgY2VsbCIpCiAgY2VsbF9vbnRvbG9neV9pZCA9IGMoIkNMOjAwMDA2MjMiLAogICJDTDowMDAwODI3IiwKICAiQ0w6MDAwMDgyNyIsCiAgIkNMOjAwMDA4MTYiLAogICJDTDowMDAwODIzIiwKICAiQ0w6MDAwMDkxNCIpCgpzdWJ0aXNzOUBtZXRhLmRhdGFbLCdjZWxsX29udG9sb2d5X2NsYXNzJ10gPC0gcGx5cjo6bWFwdmFsdWVzKHggPSBzdWJ0aXNzOUBpZGVudCwgZnJvbSA9IHN1YmNsdXN0ZXIuaWRzLCB0byA9IHN1YmNlbGxfb250b2xvZ3lfY2xhc3MpCnN1YnRpc3M5QG1ldGEuZGF0YVssJ2NlbGxfb250b2xvZ3lfaWQnXSA8LSBwbHlyOjptYXB2YWx1ZXMoeCA9IHN1YnRpc3M5QGlkZW50LCBmcm9tID0gc3ViY2x1c3Rlci5pZHMsIHRvID0gY2VsbF9vbnRvbG9neV9pZCkKCnRpc3NAbWV0YS5kYXRhW3N1YnRpc3M5QGNlbGwubmFtZXMsJ2NlbGxfb250b2xvZ3lfY2xhc3MnXSA8LSBhcy5jaGFyYWN0ZXIoc3VidGlzczlAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfY2xhc3MpCnRpc3NAbWV0YS5kYXRhW3N1YnRpc3M5QGNlbGwubmFtZXMsJ2NlbGxfb250b2xvZ3lfaWQnXSA8LSBhcy5jaGFyYWN0ZXIoc3VidGlzczlAbWV0YS5kYXRhJGNlbGxfb250b2xvZ3lfaWQpCgpUU05FUGxvdChvYmplY3QgPSBzdWJ0aXNzOSwgZG8ubGFiZWwgPSBUUlVFLCBwdC5zaXplID0gMC41LCBncm91cC5ieT0nY2VsbF9vbnRvbG9neV9jbGFzcycpCmBgYAoKV2hlbiB5b3Ugc2F2ZSB0aGUgc3VidGlzc3VlLCBwbGVhc2UgZ2l2ZSBpdCBhIG5hbWUuCgpgYGB7cn0Kc3VidGlzczkubmFtZSA9ICdOa19UX2NlbGxzJwpzYXZlKHN1YnRpc3M5LCBmaWxlPXBhc3RlMChzYXZlX2RpciwiLyIsc3VidGlzczkubmFtZSwgIl9zZXVyYXRfc3VidGlzczkuUm9iaiIpKQpgYGAKCgojIEV4cG9ydCB0aGUgZmluYWwgbWV0YWRhdGEKClNvIHRoYXQgQmlvaHViIGNhbiBlYXNpbHkgY29tYmluZSBhbGwgeW91ciBjZWxsX29udG9sb2d5X2NsYXNzcywgcGxlYXNlIGV4cG9ydCB0aGVtIGFzIGEgc2ltcGxlIGNzdi4KCmBgYHtyfQp3cml0ZS5jc3YodGlzc0BtZXRhLmRhdGFbLGMoJ3BsYXRlLmJhcmNvZGUnLCdjZWxsX29udG9sb2d5X2NsYXNzJywnc3ViY2VsbF9vbnRvbG9neV9jbGFzcycpXSxmaWxlID1wYXN0ZTAoc2F2ZV9kaXIsIi8iLCB0aXNzdWVfb2ZfaW50ZXJlc3QsIl9jZWxsX29udG9sb2d5X2NsYXNzLmNzdiIpKQpgYGAKCgoK